Подтвердить что ты не робот

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

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

[<>]+ [<>]*

4b9b3361

Ответ 1

Каждый из них является квантификатором, квантор звезды (*) означает, что предыдущее выражение может совпадать с нолем или более раз, это похоже на {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

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

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

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

Вы можете определить целое число, подобное этому:

-*[0-9]+

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

Ответ 5

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

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

Ответ 6

[<>]+ совпадает с [<>][<>]*