【问题标题】: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。
  • 这在StackOverflow 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。

标签: regex splunk


【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 2016-06-10
      • 2012-05-07
      • 1970-01-01
      • 2012-08-03
      • 2011-06-25
      相关资源
      最近更新 更多