I understand that .*
means match 0 or more of any character. But how come the regex expression [aeiou].*ing
is able to match the word morning
?
According to my understanding, o
will be matched through the [aeiou]
part then there is an r
which will correspond to .
but now we have an n
which shouldn't get matched with .*
because it should ideally match the pattern r, rr, rrr, ...
But still the morning
passes the regex test.
What am I getting wrong here?
CodePudding user response:
The regular expression [aeiou].*ing
means "one vowel, followed by any symbol any number of times, followed by ing
." It will match the orning
part of morning
because
- o - matches
[aeiou]
- rn - matches
.*
- ing - matches exactly
It's true that a .
by itself will match any single character, but when combined with *
it doesn't mean that single character has to be repeated. Don't think of .*
as just "any symbol any number of times". Think of it as "(any symbol) (any number of times)", because the (any symbol) part is allowed to change.
CodePudding user response:
.*
is not a special regex combination. It is .
followed by *
.
.
matches any character.
*
does not match anything, it is a modifier. Its meaning is "repeat the previous sub-expression, zero or more times."
It does not mean the fragment of the string matched by the previous sub-expression but the sub-expression itself.
All in all, .*
means "repeat .
(i.e. match any character) zero or more times".
.*
matches any string of any length, including the empty string (the string of length 0
).
CodePudding user response:
.*
means 0 or more of any character, not only a single character.
Meaning .*
will match any string.