Мета-символ \b означает границу слова (word boundary). Он сообщает matcher'у, что совпадение (match) должно генерироваться только в случае, если цифра (\d) находится на границе слова, то есть между символом типа \w и символом типа \W. В свою очередь, часто используемые в шаблонах мета-символы \w и \W означают следующее: \w — принадлежность множеству, которое в математической нотации записывается как { буквы, символ подчеркивания }, \W — дополнение множества \w, то есть все остальные символы.
Для знакомства с правилами образования шаблонов полезно рассмотреть несколько таблиц, которые содержат краткие описания условных обозначений, используемых в процессе образования выражений.
Символ |
Соответствует |
Символ |
Соответствует |
\d |
Цифре. Эквивалентно шаблону [0-9] |
\D |
Не цифре |
\w |
Любой букве или символу _ (подчеркивания) |
\W |
Любой не букве и не символу _ |
\s |
Любому пустому символу (whitespace) |
\S |
Любому непустому символу |
. (точка) |
Любому символу, кроме символа "возврат каретки" ('\n') |
\. |
Символу '.' (точка) |
literals |
Символы, отличные от $ . ^ { [ ( | ) * + ? \ соответствуют самим себе |
||
\ |
Признак служебного символа. Например, escape-последовательность "\\" соответствует "\", а "\(" соответствует "(". |
Кроме этих символов в тайнописи Regex часто используются повторители (quantifiers).
Quantifier |
Соответствует |
* |
Нуль или более вхождений предшествующего символа (или шаблона) |
+ |
Одно или более вхождений предшествующего шаблона |
? |
Нуль или одно вхождение предшествующего шаблона |
{n} |
n вхождений шаблона |
{n,} |
n или более вхождений шаблона |
{n,m} |
От n до m (включительно) вхождений шаблона |
Заметим, что часто используемая escape-последовательность \s (пустые, или whitespace-символы) эквивалентна множеству [ \f\n\r\t\v].
Итак, множество w — это { буквы, символ подчеркивания }. Шаблону \w+ соответствуют все слова, образованные из букв, включая подчеркивание, или строки текста, образованные из одного или более символов, принадлежащих множеству w.
Шаблону zo* соответствуют cлова: z, zo, zoo, zooo, ..., и это вполне понятно. Может быть не сразу ясно, что метод Match найдет соответствие этому шаблону и в других строках текста, например: oz, zulu, zigzag, но он не найдет его в словах: ZOO, OZ, и т. д. Дело в том, что шаблон zo* требует вхождения символа z, но не требует вхождения символа o.
Суть шаблона можно выразить в словесной форме: "есть буква z, и могут быть буквы o". Вы можете считать, что приблизились к пониманию особенностей использования повторителей, если правильно ответите на вопрос. Что выведет следующий фрагмент?
text = "oz";
pattern = "zo*"; // Смысл шаблона: есть буква z, и могут быть буквы o
Regex ex = new Regex (pattern);
if (ex.IsMatch (text))
Console.WriteLine ("There are " + ex.Matches(text).Count + " matches");
else
Console.WriteLine ("No matches");
foreach (Match m in ex.Matches(text))
Console.WriteLine ("'" + m + "'");
Он выведет сообщение об одном найденном совпадении и строку 'z', так как в тестируемой строке нашлось одно вхождение z, которое удовлетворяет шаблону (pattern). Обрамление '' из апострофов позволяет увидеть пробелы и другие whitespace-символы (табуляции, конец страницы, и т. д.). Поясним на примерах смысл других типов повторителей.
¨ Шаблону z+ удовлетворяют строки: z, glukoza, bizzz, то есть все слова, где есть хоть одна буква z.
¨ Шаблону a?ve? удовлетворяют строки: never, vain, v, veer, Antananarivo, то есть все слова, где есть хоть одна буква v, так как другие символы не обязательны.
¨ Шаблонам o{2} и o{2,} удовлетворяют строки: zoo, gooogle, но не удвлетворяют: polo, monoatomic.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.