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

Luc*_*cas 53 ruby regex

有人可以用正则表达式来解释什么(?i)(?-i)包装一个单词吗?

(?i)test(?-i)
Run Code Online (Sandbox Code Playgroud)

我测试和它匹配test,TESTteSt.但我以前从未见过这个.什么是?之前i是什么意思?我看到这个在这里.

gpo*_*ojd 75

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

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

更多信息,请参阅本页"仅正常表达式的一部分""打开和关闭模式"部分:

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

并非所有正则表达式都支持这一点.JavaScript和Python将所有模式修饰符应用于整个正则表达式.它们不支持(?-ismx)语法,因为当模式修饰符应用于整个正则表达式时,关闭选项毫无意义.默认情况下,所有选项均已关闭

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


Mat*_*ics 23

(?i)打开不区分大小写的模式,(?-i)将其关闭.

例如,如果您尝试过(?i)te(?-i)st,它将匹配test,TEst,tEst,但不匹配teST.


gma*_*iar 5

直接取自ruby文档。

正则表达式的结束定界符后可以跟一个或多个单字母选项,这些选项控制模式的匹配方式。

/ pat / i-忽略大小写

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

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

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

i,m和x也可以使用(?on-off)构造应用于子表达式级别,从而启用选项,并针对括号括起来的表达式禁用选项off。