正则表达式中的“?i”和“?-i”是什么意思?

时间:2013-02-28 21:07:37

标签: ruby regex

有人可以解释一下(?i)(?-i)在正则表达式中包含单词的含义吗?

(?i)test(?-i)

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

3 个答案:

答案 0 :(得分:67)

(?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,但不匹配   teST或TEST。

答案 1 :(得分:20)

(?i)启用不区分大小写的模式,(?-i)将其关闭。

例如,如果您尝试(?i)te(?-i)st,则会匹配测试 TEst tEst ,但不会测试

答案 2 :(得分:3)

直接来自ruby docs。

  

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

     

/ pat / i - 忽略大小写

     

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

     

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

     

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

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