Может ли кто-нибудь сказать мне разницу между операторами *
и +
в приведенном ниже примере:
[<>]+
[<>]*
Может ли кто-нибудь сказать мне разницу между операторами *
и +
в приведенном ниже примере:
[<>]+
[<>]*
Каждый из них является квантификатором, квантор звезды (*
) означает, что предыдущее выражение может совпадать с нолем или более раз, это похоже на {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 по-прежнему используются BRE, grep
и sed
(оба из которых имеют возможность ERE в качестве опции) и non-vim vi
.
*
означает ноль или более предыдущего выражения.
Другими словами, выражение необязательно.
Вы можете определить целое число, подобное этому:
-*[0-9]+
Другими словами, необязательный отрицательный знак, за которым следует одна или несколько цифр.
Они являются квантификаторами.
+
означает 1 или много (по крайней мере одно вхождение для успешного совпадения)*
означает 0 или много (совпадение выполняется независимо от наличия строки поиска) [<>]+
совпадает с [<>][<>]*