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