Regex plus против звездной разницы?

В чем разница между:

(.+?) 

а также

 (.*?) 

когда я использую его в своем php preg_match regex?

Solutions Collecting From Web of "Regex plus против звездной разницы?"

Они называются кванторами.

* 0 или более предыдущего выражения

+ 1 или более из предыдущего выражения

По умолчанию квантификатор является жадным, это означает, что он соответствует как можно большему количеству символов.

? после того, как квантификатор изменит поведение, чтобы сделать этот квантификатор «неровным», означает, что он будет соответствовать как можно меньше.

Пример жадных / неразборчивых

Например, в строке " abab "

a.*b будет соответствовать «abab» (preg_match_all вернет одно совпадение, «abab»)

в то время a.*?b будет соответствовать только стартовому «ab» (preg_match_all вернет два совпадения, «ab»)

Вы можете тестировать свои регулярные выражения онлайн, например, в Regexr, см. Жадный пример здесь

Первый ( + ) – один или несколько символов . Второй ( * ) – это ноль или более символов . Оба не являются жадными ( ? ) И соответствуют всем ( . ).

+ минимально, * может быть нулем.

A + соответствует одному или нескольким экземплярам предыдущего шаблона. A * соответствует нулю или более экземплярам предыдущего шаблона.

Поэтому в основном, если вы используете + должен быть хотя бы один экземпляр шаблона, если вы используете * он все равно будет соответствовать, если нет его экземпляров.

+ соответствует хотя бы одному символу

* соответствует любому числу (включая 0) символов

? указывает на ленивое выражение, поэтому оно будет соответствовать как можно меньшему количеству символов.

Звезда очень похожа на плюс, единственное отличие состоит в том, что, хотя плюс соответствует 1 или более предшествующим символу / группе, начало соответствует 0 или более.

Рассмотрим ниже строку, которая будет соответствовать.

 ab 

Образец (ab.*) Вернет совпадение для группы захвата с результатом ab

Хотя шаблон (ab.+) будет соответствовать и ничего не возвращает.

Но если вы измените строку на следующую, она вернет aba для шаблона (ab.+)

 aba 

Я думаю, что в предыдущих ответах не был показан простой пример:

например, у нас есть массив:

 numbers = [5, 15] 

Следующее выражение регулярного выражения ^[0-9]+ соответствует только: 15 . Однако ^[0-9]* соответствует как 5 and 15 . Разница в том, что оператор + требует, по крайней мере, одного дубликата предыдущего выражения регулярного выражения

В RegEx {i,f} означает «между i f совпадениями». Давайте рассмотрим следующие примеры:

  • {3,7} означает от 3 до 7 совпадений
  • {,10} означает до 10 совпадений без нижнего предела (т.е. нижний предел равен 0)
  • {3,} означает не менее 3 совпадений без верхнего предела (т. Е. Верхний предел бесконечен)
  • {,} означает, что верхний предел или нижний предел для количества совпадений (т.е. нижний предел равен 0, а верхний предел равен бесконечности)
  • {5} означает ровно 4

Большинство хороших языков содержат аббревиатуры, поэтому RegEx:

  • + является сокращением для {1,}
  • * является сокращением для {,}
  • ? является сокращением для {,1}

Это означает, что + требуется по крайней мере 1 совпадение, в то время как * принимает любое количество совпадений или нет совпадений вообще и ? принимает не более 1 совпадающих или нулевых совпадений.

Кредит: Codecademy.com