Что описывает этот шаблон регулярных выражений: ". {5,} +" - PullRequest
2 голосов
/ 11 сентября 2010

Одно из полей ввода HTML в приложении, над которым я работаю, проверяется с помощью следующего шаблона регулярных выражений:

.{5,}+

Что это за проверка?

Другие поля проверяются по этому шаблону, который я тоже не понимаю:

.+

Ответы [ 4 ]

18 голосов
/ 11 сентября 2010

Мы можем разбить ваш шаблон на три части:

точка - это подстановочный знак, он соответствует любому символу (по умолчанию, за исключением новых строк, если только /s установлен модификатор .

{5,} указывает повтор на точке.Это говорит о том, что точка должна совпадать как минимум 5 раз.Если бы после запятой было число, точка должна была бы совпадать между 5 и этим числом раз, но так как числа нет, оно может совпадать бесконечное число раз.

В вашем первом шаблоне, +является собственническим квантификатором (см. ниже о том, как + может означать разные вещи в разных ситуациях).Он сообщает механизму регулярных выражений, что, как только он удовлетворяет предыдущему условию (т. Е. .{5,}), он не должен пытаться вернуться назад.


Ваш второй шаблон проще.Точка все еще означает то же самое, что и выше (работает как подстановочный знак).Однако здесь + имеет другое значение и является оператором повторения, означающим, что точка должна совпадать 1 или более раз (что также может быть выражено как .{1,}, как мы видели выше).

Как видите, + имеет различное значение в зависимости от контекста.Когда используется сам по себе, это оператор повторения.Однако когда он следует за другим оператором повторения (*, ?, + или {...}), он становится собственническим квантификатором.

4 голосов
/ 11 сентября 2010

+ означает после другого квантификатора ({5,}) означает притяжательное совпадение , т. Е. Как только совпадение найдено, * не возвращать **.

Например, шаблон .{5,}x будет соответствовать abcdex:

  1. .{5,} соответствует abcdex.
  2. x ничего не соответствует.
  3. Итак, вернитесь назад .{5,} и дайте ему соответствовать abcde.
  4. Теперь x соответствует последнему x.

Но .{5,}+x будет не соответствует abcdex:

  1. .{5,}+ соответствует abcdex.
  2. x ничего не соответствует.
  3. Невозможно вернуть .{5,}+. Мы должны остановиться здесь.

*: Даже рисунок не может быть возвращен, сопоставленные строки все равно можно удалить целиком. Например, a?.{5,}x будет соответствовать {a? & rarr; a, .{5,}+ & rarr; bcdex, x & rarr; нет совпадений}, а затем удалите все .{5,}+ и a и перезапустите с помощью {a? & rarr; , .{5,}+ & rarr; abcdex, x & rarr; не совпадает}. Следовательно, мы также можем сказать, что + делает квантор "атомным".


С другой стороны, + означает только {1,}, то есть соответствует один или несколько раз.

3 голосов
/ 11 сентября 2010

.{5,}+ означает

  1. Соответствует любому отдельному символу, который не является символом разрыва строки
    1. От 5 до неограниченного времени;столько раз, сколько возможно, без отдачи (притяжательного)

.+ - это то же самое, но оно совпадает от 1 до неограниченного количества раз, возвращая при необходимости(жадный).

Как я уже упоминал много раз ранее, я большой поклонник RegexBuddy .Режим «Создать» отлично подходит для деконструкции регулярных выражений.

3 голосов
/ 11 сентября 2010

Любой символ 5 или более раз.

  • "."означает любой символ, кроме разрыва строки.
  • {m, n} определяет ограниченный интервал.«м» является мин.«n» - макс.Если n не определено, как здесь, оно не ограничено.
  • "+" означает притяжательное.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...