Регулярное выражение плюс против звездной разницы?
в чем разница между:
(.+?)
и
(.*?)
когда я использую его в моем 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}
означает "междуi
tof
матчи". Давайте рассмотрим следующие примеры:
{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
. Разница в том, что+
оператор требует по крайней мере одного дублировать предшествующих регулярных выражений