【问题标题】:What do `?i` and `?-i` in regex mean?正则表达式中的 `?i` 和 `?-i` 是什么意思?
【发布时间】:2013-02-15 05:47:49
【问题描述】:

有人能解释一下(?i)(?-i) 在正则表达式中的含义吗?

(?i)test(?-i)

我测试过,它与testTESTteSt 匹配。但我以前从未见过这种情况。 i 之前的 ? 是什么意思?我看到了这个here

【问题讨论】:

    标签: ruby regex


    【解决方案1】:

    (?i) 开启不区分大小写模式,(?-i) 关闭。

    例如,如果您尝试(?i)te(?-i)st,它将匹配 testTEsttEst,但不匹配 teST。

    【讨论】:

      【解决方案2】:

      (?i) 启动不区分大小写模式

      (?-i) 关闭不区分大小写模式

      更多信息请关注"Turning Modes On and Off for Only Part of The Regular Expression" section of this page

      现代正则表达式风格允许您仅将修饰符应用于 正则表达式。如果在中间插入修饰符 (?ism) 正则表达式,修饰符仅适用于正则表达式的一部分 修饰符的权利。您可以通过在它们前面加上 减号。减号后的所有模式都将关闭。例如。 (?i-sm) 打开不区分大小写,并关闭两个单行 模式和多线模式。

      并非所有的正则表达式都支持这一点。 JavaScript 和 Python 都适用 整个正则表达式的模式修饰符。他们不支持 (?-ismx) 语法,因为关闭选项是没有意义的 模式修饰符适用于整个正则表达式。所有选项都是 默认关闭。

      您可以快速测试您使用的正则表达式如何处理模式 修饰符。正则表达式 (?i)te(?-i)st 应该匹配 test 和 TEst,但不匹配 测试或测试。

      【讨论】:

      • Python 3 确实支持(?i)
      • 在我写这篇文章时,选择的答案已经快 8 岁了。链接到页面上的语言正则表达式.info(我的#2 正则表达式站点,在 regex101 之后)已更改。我建议 Python 用户检查一下。同样,他们应该查阅更新的相关文档docs.python.org/3.6/library/re.html#re.I。请注意 re.I 上 3.6 的文档与 3.9 的文档不同!最后,是的,我知道这最初是一个 ruby​​ 问题,但这个答案明确指的是 Python,所以我想我应该警告更新。
      【解决方案3】:

      直接取自 ruby​​ 文档。

      正则表达式的结束分隔符后面可以跟一个或多个 控制模式如何匹配的单字母选项。

      /pat/i - 忽略大小写

      /pat/m - 将换行符视为匹配的字符。

      /pat/x - 忽略模式中的空格和 cmets

      /pat/o -> 只执行一次 #{} 插值

      i、m 和 x 也可以应用于 具有 (?on-off) 构造的子表达式级别,它启用 选项打开,并禁用选项关闭的表达式 括号。

      【讨论】:

      • 谢谢 我以前从未见过/i 表示法,但我习惯了(?i) 表示法。
      猜你喜欢
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 2019-08-13
      • 1970-01-01
      • 2020-01-11
      相关资源
      最近更新 更多