Регулярные выражения POSIX – Квантификаторы

Представьте себе случай, когда нужно отобрать строки, в которых имеется комбинация символов ссс. Первое, что приходит на ум, – это применить шаблон, состоящий из одних литерал (ссс). Однако для решения подобных задач в регулярных выражениях типа POSIX применяют специальные символы, которые называются квантификаторы. Например, в нашем случае шаблон будет выглядеть следующим образом: с{3}.

В фигурных скобках можно указывать не только конкретное количество повторений, но и диапазон. Например, шаблон с {2,3} будет соответствовать строкам, где содержатся сочетания символов сс или ссс. Если второй параметр опустить (с{2,}), то строка может содержать два и более символа с, идущих подряд.

На первый взгляд может показаться, что шаблоны с{2},с{2,3}и с{2,} эквивалентны, так как если строка содержит два или более символа с, идущих подряд, то она будет соответствовать всем этим шаблонам. Однако не стоит спешить с выводами, различие все-таки есть. Рассмотрим пример:

1
2
3
4
5
6
7
8
9
10
11
<?php
eregi("c{2}" , "qwcccccccqw", $regs);
eregi("c{2,3}" ,  "qwcccccccqw",  $regs);
eregi("c{2,}" , "qwcccccccqw", $regs);
// выведет "cc"
echo "<br />".$regs[0];
// выведет "ссс"
echo "<br />".$regs[1];
// выведет "ccccccc"
echo "<br />".$regs[2];
?>

Здесь мы проверяем соответствие шаблонам строки qwcccccccqw и записываем совпавшие комбинации в массив $regs. В результате значения элементов массива оказались сс, ссс и ссссссс. В этом и состоит отличие этих шаблонов.

Помимо фигурных скобок существует еще три квантификатора;
» с+ – строка должна содержать один или более символов с , идущих подряд (с{1,});
» с* – строка должна содержать ноль или более символов с , идущих подряд (с{0,});
» с? – строка должна содержать ноль или один символ с (с{0,1}).

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100