此处的逻辑,是根据官方的解释加上实际调试所得到的结果,来解释说明的。
举例,对于输入字符串:
<A href="file:///C:/Users/CLi/AppData/Local/Temp/WindowsLiveWriter1627300719/supfiles111AD15/王珞丹 图片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/supfiles111AD15/王珞丹 图片22_thumb.jpg" width=176 height=244></A>
用这样的代码去匹配:
string imgP = @"href=""file:///((?<localAddrPref>.+?WindowsLiveWriter.+?/supfile[^/]+?)/(?<realName>[^""]+?)\[\d+\](\.(?<suffix>\w{3,4}))?)"".+?title=""?(\k<realName>)?""?.+?alt=""?(\k<realName>)?""?.+?src=""file:///(\k<localAddrPref>/\k<realName>_thumb(\.\k<suffix>)?)"""; Regex imgRx = new Regex(imgP, RegexOptions.Singleline); MatchCollection foundImg = imgRx.Matches(curSelectCotent);
则匹配的结果是:
_groups {System.Text.RegularExpressions.Group[9]} System.Text.RegularExpressions.Group[] [0] {C:/Users/CLi/AppData/Local/Temp/WindowsLiveWriter1627300719/supfiles111AD15/王珞丹 图片22[3].jpg} System.Text.RegularExpressions.Group [1] {.jpg} System.Text.RegularExpressions.Group [2] {王珞丹 图片22} System.Text.RegularExpressions.Group [3] {王珞丹 图片22} System.Text.RegularExpressions.Group [4] {C:/Users/CLi/AppData/Local/Temp/WindowsLiveWriter1627300719/supfiles111AD15/王珞丹 图片22_thumb.jpg} System.Text.RegularExpressions.Group [5] {.jpg} System.Text.RegularExpressions.Group [6] {C:/Users/CLi/AppData/Local/Temp/WindowsLiveWriter1627300719/supfiles111AD15} System.Text.RegularExpressions.Group [7] {王珞丹 图片22} System.Text.RegularExpressions.Group [8] {jpg} System.Text.RegularExpressions.Group
注意,上述内容是debug所查看到的。
group[0]不是整个字符串,而是表示此处匹配的第一个结果,即index从0开始,而不是默认的1.
不过下面还是以代码中的写法来解释。