Регулярное выражение плюс против звездной разницы?
в чем разница между:
(.+?)
и
(.*?)
когда я использую его в моем php preg_match регулярное выражение?
9 ответов:
они называются кванторами.
*0 или более из предыдущего выражения
+1 или более из предыдущего выраженияпо умолчанию Квантор является жадным, что означает, что он соответствует как можно большему количеству символов.
The
?после квантификатора изменяет поведение, чтобы сделать этот Квантор "нежадные", значит, будет как можно меньше соответствовать.пример жадный / нескладный
например на строку " abab"
a.*bбудет соответствовать "abab" (preg_match_all вернет один матч, "abab")пока
a.*?bбудет соответствовать только стартовый " ab "(preg_match_all вернет два матча, "ab")вы можете проверить свои регулярные выражения онлайн, например, на Regexr, смотрите жадный пример здесь
первый (
+) составляет один или несколько символов. Второй (*) составляет ноль или более символов. Оба не жадные (?) и соответствовать что-нибудь (.).
+соответствует хотя бы одному символу
*соответствует любому числу (включая 0) символовThe
?указывает на ленивое выражение, поэтому оно будет соответствовать как можно меньшему количеству символов.
A
+игр один или несколько экземпляры предыдущего шаблона. А*игр ноль или больше экземпляры предыдущего шаблона.так что в основном, если вы используете
+должен быть хотя бы один экземпляр шаблона, если вы используете*он все равно будет соответствовать, если нет его экземпляров.
звезда очень похожа на плюс, единственная разница заключается в том, что в то время как плюс соответствует 1 или более из предшествующего символа/группы, начало соответствует 0 или более.
рассмотрим ниже строку, чтобы соответствовать.
abшаблон
(ab.*)вернет совпадение для группы захвата с результатомabв то время как шаблон
(ab.+)не будет соответствовать и не возвращает ничего.но если вы измените строку на следующую, она вернет
abaдля шаблона(ab.+)aba
В Соответствии
{i,f}означает "междуitofматчи". Давайте рассмотрим следующие примеры:
{3,7}средства от 3 до 7 матчей{,10}означает до 10 матчей без нижнего предела (т. е. нижний предел равен 0){3,}означает по крайней мере 3 матча без верхнего предела (т. е. высокий предел-бесконечность){,}означает отсутствие верхнего или нижнего предела для количества совпадений (т. е. нижний предел равен 0, а верхний предел-бесконечности){5}значит ровно 4большинство хороших языков содержат аббревиатуры, так же как и регулярное выражение:
+- это сокращение для{1,}*- это сокращение для{,}?- это сокращение для{,1}это значит
+требуется по крайней мере 1 матч в то время как*принимает любое количество матчей или нет спички у всех и?принимает не более 1 матча или ноль матчей.Кредит: Codecademy.com
Я думаю, что предыдущие ответы не выделяют простой пример:
например у нас есть массив:
numbers = [5, 15]следующее регулярное выражение выражение
^[0-9]+матчи:15только. Однако,^[0-9]*матчей5 and 15. Разница в том, что+оператор требует по крайней мере одного дублировать предшествующих регулярных выражений