Путаница относительно оператора * в регулярном выражении
Я знаю, что оператор * означает любое число вхождений предыдущего символа / с.
Таким образом, выражение ab* будет генерировать строки типа "ab", "abab" и т. д. Но он также генерирует строку "a", и я не понимаю этой логики. Является ли это чем-то, что оператор * рассматривает только 1 символ, предшествующий ему для операции. Таким образом, с помощью этой логики * операция применяется только к 'b' в упомянутом примере, и b повторяется 0 раз, так что результирующая строка" a " генерируется. Пожалуйста помощь.
Edit: 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)*.Эта часть Википедии объясняет это лучше меня.