На точке
В регулярном выражении точка .
соответствует почти любому символу.Единственные символы, которые обычно не совпадают, это символы новой строки.Чтобы точка соответствовала всем символам, необходимо включить так называемый режим однострочный (он же «точка всех»).
В C # это указаноиспользуя RegexOptions.Singleline
.Вы также можете встроить это как (?s)
в шаблон.
Ссылки
На метасимволах и экранировании
.
- не единственные метасимволы регулярных выражений.Это:
( ) { } [ ] ? * + - ^ $ . | \
В зависимости от того, где они появляются, если вы хотите, чтобы эти символы означали буквально (например, .
как точка), вам может потребоваться сделать то, что называется«побег».Это делается путем добавления к символу \
.
. Конечно, \
также является escape-символом для строковых литералов C #.Чтобы получить литерал \
, вам нужно удвоить его в строковом литерале (т. Е. "\\"
- строка длиной один).Кроме того, в C # также есть так называемые строковые литералы, заключенные в кавычки * 1044, где escape-последовательности не обрабатываются.Таким образом, следующие две строки равны:
"c:\\Docs\\Source\\a.txt"
@"c:\Docs\Source\a.txt"
Поскольку \
часто используется в регулярном выражении, @
-цитирование часто используется, чтобы избежать чрезмерного удвоения.
Ссылки
Для классов символов
Механизмы регулярных выражений позволяют определять классы символов, например, [aeiou]
- это класс символов, содержащий 5 гласных букв.Вы также можете использовать метасимвол -
для определения диапазона, например, [0-9]
- это классы символов, содержащие все 10-значные символы.
Поскольку часто используются цифровые символы, регулярное выражение также предоставляет для него сокращенную запись,что \d
.В C # это также будет соответствовать десятичным цифрам из других наборов символов Unicode, если только вы не используете RegexOptions.ECMAScript
, где он строго [0-9]
.
Ссылки
Смежные вопросы
Соберите все вместе
Похоже, что следующее будет работать для вас:
@-quoting digits_ _____anything but ', captured
| / \ / \
new Regex(@"GuestbookWidget\('\d*', '([^']*)', 500\);", RegexOptions.IgnoreCase);
\/ \/
escape ( escape )
Обратите внимание, что я немного изменил шаблон, чтобы он использовал отрицательный символьный класс вместо сопоставления с подстановочными знаками.Это вызывает небольшое различие в поведении, если вы разрешите экранирование '
во входной строке, но ни один из шаблонов не справится с этим случаем идеально.Однако, если вы не позволяете экранировать '
, этот шаблон определенно лучше.
Ссылки