Разница между * и + регулярное выражение

Кто-нибудь может сказать мне разницу между * а также + операторы в примере ниже:

[<>]+[<>]*

7 ответов

Каждый из них является квантификатором, звездным квантификатором (*) означает, что предыдущее выражение может соответствовать нулю или более раз, как это {0,} в то время как квантификатор плюс (+) указывают, что предыдущее выражение ДОЛЖНО совпадать как минимум один раз или несколько раз, и оно совпадает с {1,},

Итак, резюмируем:

a*  ---> a{0,}  ---> Match a or aa or aaaaa or an empty string
a+  ---> a{1,}  ---> Match a or aa or aaaa but not a string empty

* означает ноль или больше, и + означает один или более. Таким образом, разница в том, что пустая строка будет соответствовать второму выражению, но не первому.

+ означает один или несколько предыдущих атомов. ({1,})

* означает ноль или более. Это может не совпадать ни с чем, кроме символов, указанных в выражении в квадратных скобках. ({0,})

Обратите внимание, что + доступно в расширенных и Perl-совместимых регулярных выражениях и недоступно в Basic RE. * доступно на всех трех диалектах RE. Этот диалект, который вы используете, зависит, скорее всего, от языка, на котором вы говорите.

В значительной степени единственные вещи в современных операционных системах, которые по умолчанию все еще используют BRE, это grep а также sed (оба имеют возможность ERE в качестве опции) и не vim vi,

Они являются квантификаторами.

  • + означает 1 или много (хотя бы одно вхождение для успеха матча)
  • * означает 0 или много (совпадение успешно независимо от наличия строки поиска)

* означает ноль или более предыдущего выражения.

Другими словами, выражение является необязательным.

Вы можете определить целое число следующим образом:

-*[0-9]+

Другими словами, необязательный отрицательный знак, за которым следуют одна или несколько цифр.

[<>]+ такой же как [<>][<>]*

Я приведу несколько примеров, чтобы расширить ответы выше. Пусть у нас есть текст:

      100test10
test10
test

если мы напишем \d+test\d+, это выражение соответствует 100test10 а также test10 но \d*test\d* соответствует трем из них

Другие вопросы по тегам