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