Что такое двойной плюс в регулярных выражениях?

Я видел это в каком-то PHP-скрипте:

[a-zA-Z0-9_]++

Что означает двойной плюс?

2 ответа

Решение

Это притяжательный квантификатор.

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

Чтобы дать вам очень простой пример:

Допустим, у вас есть строка "123", Подходящие символы имеют ^ внизу в следующих примерах.

  1. Regex: \d+?. частичное совпадение!

    123  # The \d+? eats only 1 because he's lazy (on a diet) and leaves the 2 to the .(dot).
    ^^   # This means \d+? eats as little as possible.
    
  2. Regex: \d+. полное совпадение!

    123  # The \d+ eats 12 and leaves the 3 to the .(dot).
    ^^^  # This means \d+ is greedy but can still share some of his potential food to his neighbour friends.
    
  3. Regex: \d++. не совпадает!

    123  # The \d++ eats 123. He would even eat more if there were more numbers following. 
         # This means \d++ is possessive. There is nothing left over for the .(dot), so the pattern can't be matched.
    
Другие вопросы по тегам