5.4.4.1. 关于默认情况下就是非单行模式,所以默认情况,点是不匹配换行字符\n的

一般来说,调用的正则表达式的库函数,比如C#中的用new Regex生成对应的Regex变量的时候:

Regex imgRx = new Regex(imgP); 
MatchCollection foundImg = imgRx.Matches(curSelectCotent);
            

默认就是多行模式,所以如果像我这里,如果去匹配的内容,涉及到中间包括\n字符,那么默认情况下,是无法匹配的,

导致程序调试花了半天时间,才找到上述原因。

例 5.1. 默认的点'.'不匹配换行\n

对于一堆字符:


<P><A 
href="file:///C:/Users/CLi/AppData/Local/Temp/WindowsLiveWriter1627300719/supfiles6977DF/F200908260947322978810268[2].jpg"><IMG 
style="BACKGROUND-IMAGE: none; BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" 
title=F200908260947322978810268 border=0 alt=F200908260947322978810268 
src="file:///C:/Users/CLi/AppData/Local/Temp/WindowsLiveWriter1627300719/supfiles6977DF/F200908260947322978810268_thumb.jpg" 
width=206 height=244></A>&nbsp;</P> 
<P><A 
href="file:///C:/Users/CLi/AppData/Local/Temp/WindowsLiveWriter1627300719/supfiles6977DF/王珞丹 图片22[3].jpg"><IMG 
style="BACKGROUND-IMAGE: none; BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" 
title="王珞丹 图片22" border=0 alt="王珞丹 图片22" 
src="file:///C:/Users/CLi/AppData/Local/Temp/WindowsLiveWriter1627300719/supfiles6977DF/王珞丹 图片22_thumb.jpg" 
width=176 height=244></A><A 
href="file:///C:/Users/CLi/AppData/Local/Temp/WindowsLiveWriter1627300719/supfiles6977DF/王珞丹 图片333[2].jpg"><IMG 
style="BACKGROUND-IMAGE: none; BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; PADDING-TOP: 0px" 
title="王珞丹 图片333" border=0 alt="王珞丹 图片333" 
src="file:///C:/Users/CLi/AppData/Local/Temp/WindowsLiveWriter1627300719/supfiles6977DF/王珞丹 图片333_thumb.jpg" 
width=230 height=244></A></P>

                

然后用下面的代码去匹配:

string imgP = @"href=""(file:.+?WindowsLiveWriter.+?)"".+?src=""(file:.+?WindowsLiveWriter.+?)"""; 
Regex imgRx = new Regex(imgP); 
MatchCollection foundImg = imgRx.Matches(curSelectCotent); 
                

则其中的"".+?src=""中的.+?是无法匹配成功的,因为上述输入的字符串中,包括了换行符,导致此处无法匹配。

而只有把

Regex imgRx = new Regex(imgP);

改为:

Regex imgRx = new Regex(imgP, RegexOptions.Singleline);

才是可以的。

即设置为单行模式,此处点(.)就匹配,包括\n在内的任意单个字符了。

其他语言中,比如Python等,也有对应的single line,multi line等方面的设置,可根据自行需要设置。