这个正则表达式中的 (?i) 和 ?@ 是啥意思[重复]
Posted
技术标签:
【中文标题】这个正则表达式中的 (?i) 和 ?@ 是啥意思[重复]【英文标题】:What does (?i) and ?@ in this regex mean [duplicate]这个正则表达式中的 (?i) 和 ?@ 是什么意思[重复] 【发布时间】:2014-05-22 14:17:16 【问题描述】:在下面的正则表达式中,“(?i)”和“?@”是什么意思?
(?i)<.*?@(?P<domain>\w+\.\w+)(?=>)
我知道“?”表示零或一,并且 i 设置不区分大小写。
此正则表达式从 mailto 字段中的电子邮件地址捕获域,但不包括 @ 符号。它是从 SPLUNK 6.0.2 中生成的 erex 命令
【问题讨论】:
您确定您没有忘记(?P
部分中的任何字符吗?例如。 (?:P
?
这绝对像引用的那样有效。
@sp00m 实际上是命名提取的一部分 (?P...)。它可能特定于 SPLUNK。
这在*** Regular Expression FAQ 中得到了部分解决。相关问题:*?
:zero-or more with reluctant quantifier(“量词”部分,在顶部)和What does the i
modifier mean?,(“修饰符”部分,大约向下 1/2)。
Splunk 也列在“General documentation > Official documentation for specific flavor”下,大约下降了 3/4。
【参考方案1】:
在这里演示:https://regex101.com/r/hE9gB4/1
(?i)<.*?@(?P<domain>\w+\.\w+)(?=>)
它实际上是从电子邮件 ID 中获取您的域名:
(?i)
使其匹配不区分大小写和
?@
只不过是 @
,它与字符 @
字面匹配。
?@
中的 ?
是 .*?
的一部分,我们称之为惰性运算符,它将为您提供 <
和 @
之间的文本
如果您在.*
之后不使用?
,它将匹配<
之后的所有内容到最后。 (我们称之为贪心算子)
【讨论】:
【参考方案2】:?这是 UNGREEDY 或 LAZYNESS 修饰符:
.*?
它的意思是:“一切都很好,直到检测到后面的@字符”。否则 .* 将匹配所有内容,直到字符串结尾。
在这里阅读:http://www.regular-expressions.info/repeat.html
【讨论】:
以上是关于这个正则表达式中的 (?i) 和 ?@ 是啥意思[重复]的主要内容,如果未能解决你的问题,请参考以下文章