Member 13605567 Ответов: 2

Вас смущают кванторы регулярных выражений?


Я учу себя тому, как делать Квантор {2}, поэтому я читаю, что это основано ровно на 2 случаях, но мой if else говорит, что это не упоминается 2 раза, Почему это так?

<?php 
$string = 'sasa sasa'; 
if(preg_match('/sasa{2}/',$string)) 
{ 
echo 'sasa is mentioned 2 times'; 
} 
else 
{ 
echo "sasa is not mentioned 2 times"; 
} 
?>


Что я уже пробовал:

Поиск в Google, но я не могу найти так много простой для понимания информации об этом.

Peter_in_2780

У меня нет под рукой инструментов для регулярных выражений, но с моей точки зрения, ваше регулярное выражение настроено так, чтобы соответствовать "sasaa". Другими словами, Квантор относится к последнему сопоставляемому элементу, который является одним символом. Попробуйте '/(sasa){2}/'

Но даже в этом случае вам придется отчитаться за пробел.

2 Ответов

Рейтинг:
2

Jochen Arndt

Как уже было сказано, вам придется подсчитать количество совпадений. Это можно сделать с помощью PHP: preg_match_all - руководство пользователя[^] который возвращает количество совпадений:

<?php.
$string = 'sasa sasa';.
$count = preg_match_all('/sasa/', $string, $matches);
echo "sasa is mentioned $count times\n";.
?>


Рейтинг:
1

Patrice T

Вы неправильно используете Квантор.

/sasa{2}/

будет совпадать только в том случае, если строка содержит "sasaa"
если вы хотите узнать, есть ли "sasa" 2 раза в строке, вам нужно использовать "/sasa/" и спросить количество совпадений.

Всего лишь несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & Test RegEx[^]
Этот пример показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]


Peter_in_2780

Нет! /sasa{2}/ соответствует "sasaa", а не "sasasasa". См. Мой комментарий на ОП.

Patrice T

Ой