这个正则表达式中的 (?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) 使其匹配不区分大小写和

?@ 只不过是 @,它与字符 @ 字面匹配。

?@ 中的 ?.*? 的一部分,我们称之为惰性运算符,它将为您提供 &lt;@ 之间的文本

如果您在.* 之后不使用?,它将匹配&lt; 之后的所有内容到最后。 (我们称之为贪心算子)

【讨论】:

【参考方案2】:

?这是 UNGREEDY 或 LAZYNESS 修饰符:

.*?

它的意思是:“一切都很好,直到检测到后面的@字符”。否则 .* 将匹配所有内容,直到字符串结尾。

在这里阅读:http://www.regular-expressions.info/repeat.html

【讨论】:

以上是关于这个正则表达式中的 (?i) 和 ?@ 是啥意思[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 (?<!-) 是啥意思

正则表达式中的 ^ 和 $ 是啥意思?

正则表达式中的 ^ 和 $ 是啥意思?

正则表达式中的 ^ 和 $ 是啥意思?

参考 - 这个正则表达式是啥意思?

参考 - 这个正则表达式是啥意思?