Путаница с оператором * в регулярном выражении

Я знаю, * оператор означает любое число вхождений предыдущего символа / ов.

Таким образом, выражение 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)*,

Эта часть Википедии объясняет это лучше меня.

Другие вопросы по тегам