Что означает символ плюса в регулярном выражении?
Что означает + в регулярном выражении?
Ответы (4)
+ на самом деле может иметь два значения, в зависимости от контекста.
Как и другие упомянутые ответы, + обычно является оператором повторения и заставляет предыдущий токен повторить один или несколько раз. a+ будет выражаться как aa* в формальной теории языка, а также может быть выражено как a{1,} ( совпадение минимум 1 раз и максимум бесконечное количество раз).
Однако + может также сделать другие квантификаторы притяжательными, если он следует за оператором повторения (например, ?+, *+, ++ или {m,n}+). Притяжательный квантификатор — это расширенная функция некоторых разновидностей регулярных выражений (PCRE, Java и движок JGsoft), которая сообщает движку не возвращаться после того, как совпадение было установлено.
Чтобы понять, как это работает, нам нужно понять две концепции механизмов регулярных выражений: жадность и откат. Жадность означает, что в общем случае регулярные выражения будут пытаться потреблять как можно больше символов. Допустим, наш шаблон .* (точка — это специальная конструкция в регулярных выражениях, которая означает любой символ1; звездочка означает совпадение ноль или более раз), и ваша цель – aaaaaaaab. Будет использована вся строка, поскольку вся строка является самым длинным совпадением, удовлетворяющим шаблону.
Однако, допустим, мы меняем шаблон на .*b. Теперь, когда механизм регулярных выражений пытается сопоставить aaaaaaaab, .* снова использует всю строку. Однако, поскольку движок достиг конца строки, а шаблон еще не удовлетворен (.* потребляет все, но шаблон все еще должен соответствовать b впоследствии), он возвратится, один символ в раз и попробуйте сопоставить b. Первый возврат заставит .* потреблять aaaaaaaa, а затем b может потреблять b, и шаблон будет успешным.
Притяжательные квантификаторы также являются жадными, но, как уже упоминалось, как только они возвращают совпадение, движок больше не может возвращаться за эту точку. Таким образом, если мы изменим наш шаблон на .*+b (соответствует любому символу ноль или более раз, притяжательно, за которым следует b) и попытаемся сопоставить aaaaaaaab, снова .* поглотит всю строку, но тогда, поскольку он является притяжательным, информация о возврате будет отбрасывается, а b не может быть сопоставлено, поэтому шаблон не работает.
1 В большинстве движков точка не соответствует символу новой строки, за исключением /s ("однострочный" или "точка") модификатор указан.
(?>.*).
- person Tim Pietzcker; 03.10.2010
В большинстве реализаций + означает «один или несколько».
В некоторых теоретических работах + используется для обозначения «или» (в большинстве реализаций для этого используется символ |).
1 или более предыдущих выражений.
[0-9]+
Будет соответствовать:
1234567890
In:
У меня 1234567890 долларов
Одно или несколько вхождений предшествующих символов.
Например. a+ означает букву a один или несколько раз. Таким образом, a соответствует a, aa, aaaaaa, но не пустой строке.
Если вы знаете, что означает звездочка (*), то вы можете выразить (exp)+ как (exp)(exp)*, где (exp) — любое регулярное выражение.
sample,sampleeиsssaaaaaammmppplllllle, но неsmple- person NoodleOfDeath   schedule 14.08.2016