Question

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

Was it helpful?

Solution

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)

OTHER TIPS

? 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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top