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