在下面的正则表达式中,“(?i)”和“?@”是什么意思?
(?i)<.*?@(?P<domain>\w+\.\w+)(?=>)
我知道“?”表示零或一,我设置不区分大小写。
此正则表达式从mailto字段中的电子邮件地址捕获域,但不包含@符号。它是从SPLUNK 6.0.2
中生成的erex命令答案 0 :(得分:14)
演示:https://regex101.com/r/hE9gB4/1
(?i)<.*?@(?P<domain>\w+\.\w+)(?=>)
它实际上从电子邮件ID获取您的域名:
(?i)
使其匹配不区分大小写和
?@
只不过是@
字面上匹配字符@
。
?
中的?@
是我们称之为懒惰操作符的.*?
的一部分,它将为您提供<
和{{1}之间的文字}
如果您在@
之后不使用?
它将匹配.*
之后的所有内容。 (我们称之为贪婪的算子)
答案 1 :(得分:2)
?这是UNGREEDY或LAZYNESS修饰符:
*?
这意味着:“一切都很好,直到检测到后面的@字符”。否则。*将匹配所有内容,直到字符串结束。