一般来说,调用的正则表达式的库函数,比如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> </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等方面的设置,可根据自行需要设置。