有人可以解释一下(?i)
用(?-i)
正则表达式包装一个词是什么意思吗?
(?i)test(?-i)
我测试过,它匹配test
,TEST
和teSt
. 但我以前从未见过这种情况。?
前面是什么i
意思?我在这里看到了这个。
(?i)
启动不区分大小写模式
(?-i)
关闭不区分大小写模式
更多信息请参见本页的“仅为正则表达式的一部分打开和关闭模式”部分:
现代正则表达式风格允许您仅将修饰符应用于正则表达式的一部分。如果在正则表达式的中间插入修饰符 (?ism),则修饰符仅适用于正则表达式中修饰符右侧的部分。您可以通过在它们前面加上减号来关闭模式。减号后的所有模式都将关闭。例如 (?i-sm) 打开不区分大小写,关闭单行模式和多行模式。
并非所有的正则表达式都支持这一点。JavaScript 和 Python 将所有模式修饰符应用于整个正则表达式。它们不支持 (?-ismx) 语法,因为当模式修饰符应用于整个正则表达式时,关闭选项是没有意义的。所有选项默认关闭。
您可以快速测试您使用的正则表达式如何处理模式修饰符。正则表达式 (?i)te(?-i)st 应该匹配 test 和 TEst,但不匹配 teST 或 TEST。
(?i)
打开不区分大小写模式,(?-i)
将其关闭。
例如,如果您尝试(?i)te(?-i)st
了 ,它将匹配test、TEst、tEst,但不匹配 teST。
直接取自 ruby 文档。
正则表达式的结束分隔符后面可以跟一个或多个单字母选项,这些选项控制模式如何匹配。
/pat/i - 忽略大小写
/pat/m - 将换行符视为匹配的字符。
/pat/x - 忽略模式中的空格和注释
/pat/o -> 只执行一次 #{} 插值
i、m 和 x 也可以使用 (?on-off) 构造应用于子表达式级别,该构造为括号括起来的表达式启用选项打开和禁用选项关闭。