简体   繁体   中英

How regular expression handles `^` or `$` in the middle of regex pattern?

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM