问题
In the following regex what does "(?i)" and "?@" mean?
(?i)<.*?@(?P<domain>\w+\.\w+)(?=>)
I know that "?" means zero or one and that i sets case insensitivity.
This regex captures domains from an email address in a mailto field, but does not include the @ sign. It was generated the erex command from within SPLUNK 6.0.2
回答1:
demo here : https://regex101.com/r/hE9gB4/1
(?i)<.*?@(?P<domain>\w+\.\w+)(?=>)
its actually getting your domain name from the email id:
(?i)
makes it match case insensitive and
?@
is nothing but @
which matches the character @
literally.
the ?
in your ?@
is part of .*?
which we call as a lazy operator, It will give you the text between the <
and @
if you dont use the ?
after the .*
it will match everything after <
to the end. ( we call this as the greedy operator)
回答2:
? here is the UNGREEDY or LAZYNESS modifier:
.*?
It means: "everything is good until the @ character that follows is detected". Otherwise .* would match everything until the end of the string.
Read about it here: http://www.regular-expressions.info/repeat.html
来源:https://stackoverflow.com/questions/22961535/what-does-i-and-in-this-regex-mean