Путаница с оператором * в регулярном выражении
Я знаю, * оператор означает любое число вхождений предыдущего символа / ов.
Таким образом, выражение ab* будет генерировать строки типа "ab", "abab" и т. Д. Но оно также генерирует строку "a", и я не понимаю этой логики. Оператор * учитывает только 1 символ, предшествующий ему для операции. Таким образом, с этой логикой * операция применяется только к 'b' в упомянутом примере, и b повторяется 0 раз, поэтому генерируется результирующая строка "a". Пожалуйста помоги.
Редактировать: ab* не будет генерировать строки типа "abab", как я упоминал выше. Он генерирует только строки, такие как ab, abb, abbb и т. Д.
2 ответа
Итак, выражение
ab*
генерирует строки типа "ab", "abab " и т. д.
Это не правильно. ab*
только совпадения a
, ab
, abb
, abbb
, abbbb
...
Оператор * учитывает только 1 символ, предшествующий ему?
Именно так.
Если вы хотите подать заявку *
в ab
тогда вы должны сгруппировать это: (ab)*
Я знаю, * оператор означает любое число вхождений предыдущего символа / ов.
*
Оператор означает 0 или более вхождений предыдущего выражения. В вашем случае выражение перед *
является b
(поскольку в регулярном выражении каждый символ является выражением). Так ab*
будет соответствовать
a (0 "b" expressions)
ab (1 "b" expressions)
abbb (2 "b" expressions)
abab (1 "b" expressions followed by extra "ab", but note that `^ab*$` will not match `abab` since it is contained to the start/end of line.)
Если вы хотите соответствовать ab
ноль или более раз вы должны справиться ab
в качестве выражения, используя скобки как (ab)*
,
Эта часть Википедии объясняет это лучше меня.