【发布时间】:2013-02-15 05:47:49
【问题描述】:
有人能解释一下(?i) 和(?-i) 在正则表达式中的含义吗?
(?i)test(?-i)
我测试过,它与test、TEST 和teSt 匹配。但我以前从未见过这种情况。 i 之前的 ? 是什么意思?我看到了这个here。
【问题讨论】:
有人能解释一下(?i) 和(?-i) 在正则表达式中的含义吗?
(?i)test(?-i)
我测试过,它与test、TEST 和teSt 匹配。但我以前从未见过这种情况。 i 之前的 ? 是什么意思?我看到了这个here。
【问题讨论】:
(?i) 开启不区分大小写模式,(?-i) 关闭。
例如,如果您尝试(?i)te(?-i)st,它将匹配 test、TEst、tEst,但不匹配 teST。
【讨论】:
(?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,但不匹配 测试或测试。
【讨论】:
(?i)。
直接取自 ruby 文档。
正则表达式的结束分隔符后面可以跟一个或多个 控制模式如何匹配的单字母选项。
/pat/i - 忽略大小写
/pat/m - 将换行符视为匹配的字符。
/pat/x - 忽略模式中的空格和 cmets
/pat/o -> 只执行一次 #{} 插值
i、m 和 x 也可以应用于 具有 (?on-off) 构造的子表达式级别,它启用 选项打开,并禁用选项关闭的表达式 括号。
【讨论】:
/i 表示法,但我习惯了(?i) 表示法。