Я хочу считать ссылки, имеющие специальный символ (подчеркивание). Я написал regex свой рабочий тон в онлайн-редакторе/редакторе php, но не работает в коде С#:
<
(?<Tag_Name>(a)|img)\b
[^>]*?
\b(?<URL_Type>(?(2)href|src))
\s*=\s*
(?:"(?<URL>(?:\\.|[^\\"_#?&]++)*(?:_|(?<Query>[#?&]))(?:\\.|[^"\\]++)*)"
| '(?<URL>(?:\\.|[^\\'_#?&]++)*(?:_|(?<Query>[#?&]))(?:\\.|[^'\\]++)*)')
но в коде С# это дает ошибку компиляции
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);
Есть некоторые вещи, которые вам нужно исправить:
@"pattern"
@"the ""pattern"" with quotes"
.[^\\"_#?&]++
на (?>[^\\"_#?&]+)
.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);