Разница между * и + регулярным выражением
Может ли кто-нибудь сказать мне разницу между операторами *
и +
в приведенном ниже примере:
[<>]+
[<>]*
Ответы
Ответ 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
[<>]+
совпадает с [<>][<>]*