I am trying to play with regular expressions in python. I have framed regular expression as given below. I know that ^
is used to match at the beginning of search string. I have framed by match pattern which contains multiple ^
, but I am not sure about how re
will try to match the pattern in search string.
re.match("^def/^def", "def/def")
I was expecting that re
will be raising error, regarding invalid regular expression, but it doesn't raise any error and returns no matches.
So, my questions is "^def/^def"
or "$def/$def"
a valid regular expression ?
You do not have an invalid regular expression, ^
has legal uses in the middle of a string. When you use the re.M
flag for example:
When specified, the pattern character
'^'
matches at the beginning of the string and at the beginning of each line (immediately following each newline); and the pattern character'$'
matches at the end of the string and at the end of each line (immediately preceding each newline).
It is also possible to create patterns with optional groups, where a later ^
would still match if all of the preceding pattern matched the empty string. Using the ^
in places it can't match is not something the parser checks for and no error will be raised.
Your specific pattern will never match anything, because the ^
in the middle is unconditional and there is no possibility that the /
preceding it will ever match the requisite newline character, even if the multiline flag was enabled.