我想计算具有特殊符号(下划线)的链接。我已经编写了regex,它在在线编辑器/php编辑器中工作良好,但在C#代码中不工作:
<
(?<Tag_Name>(a)|img)'b
[^>]*?
'b(?<URL_Type>(?(2)href|src))
's*='s*
(?:"(?<URL>(?:''.|[^''"_#?&]++)*(?:_|(?<Query>[#?&]))(?:''.|[^"'']++)*)"
| '(?<URL>(?:''.|[^'''_#?&]++)*(?:_|(?<Query>[#?&]))(?:''.|[^''']++)*)')
但在C#代码中它给出的编译错误
MatchCollection underscoreLinks = Regex.Matches(strIn, "<(?<Tag_Name>(a)|img)'b[^>]*?'b(?<URL_Type>(?(2)href|src)) 's*='s*(?:"(?<URL>(?:''.|[^''"_#?&]++)*(?:_|(?<Query>[#?&]))(?:''.|[^"'']++)*)"| '(?<URL>(?:''.|[^'''_#?&]++)*(?:_|(?<Query>[#?&]))(?:''.|[^''']++)*)')", RegexOptions.IgnoreCase | RegexOptions.Multiline);
有些事情需要纠正:
- 您使用的是单个反斜杠,这些反斜杠在传递给regex之前由.net解释器进行解析。请使用逐字逐句的字符串,即:
@"pattern"
- 您的字符串中有未标注的引号。要在逐字逐句的字符串中转义它们,请使用两个双引号:
@"the ""pattern"" with quotes"
- .net不支持所有格量词。请改用原子组。即:将CCD_ 3改变为CCD_
- 您可以使用相同的多行语法,忽略空白,使用
RegexOptions.IgnorePatternWhitespace
string pattern = @"
<
(?<Tag_Name>(a)|img)'b
[^>]*?
'b(?<URL_Type>(?(2)href|src))
's*='s*
(?:""(?<URL>(?>''.|[^''""_#?&]+)*(?:_|(?<Query>[#?&]))(?>''.|[^""'']+)*)""
| '(?<URL>(?>''.|[^'''_#?&]+)*(?:_|(?<Query>[#?&]))(?>''.|[^''']+)*)')
";
Regex re = new Regex( pattern,
RegexOptions.IgnoreCase | RegexOptions.Multiline
| RegexOptions.IgnorePatternWhitespace);
MatchCollection underscoreLinks = re.Matches(text);
视频演示