我已经看到了许多使整个正则表达式不区分大小写的例子。我想知道的是只有一部分表达式不区分大小写。
例如,假设我有一个这样的字符串:
fooFOOfOoFoOBARBARbarbarbAr
如果我想匹配所有出现的“foo”无论什么情况,但我只想匹配大写“BAR”如果怎么办?
理想的解决方案是工作在正规的风格,但我有兴趣听到特定的语言(谢谢Espo)
编辑
Espo提供的链接非常有帮助。有一个很好的例子,在表达式中打开和关闭修饰符。
对我的设想,我可以做这样的事情:
(?i)foo*(?-i)|BAR
这使得匹配对于仅匹配的foo部分不区分大小写。
这似乎在大多数正则表达式实现除了Javascript,Python和一些其他(正如埃斯波提到)。
Perl允许你通过使用(?i :)模式修饰符使你的正则表达式的一部分不区分大小写。
现代的正则表达式风格允许您将修饰符应用于正则表达式的一部分。如果在正则表达式中间插入修饰符(?ism),修饰符只适用于修饰符右边的正则表达式部分。您可以通过在前面加上减号来关闭模式。减号后的所有模式将被关闭。例如。 (Δi-sm)导通不区分大小写,并且关闭单行模式和多行模式。
不是所有的正则表达式口味支持这一点。 JavaScript和Python将所有模式修饰符应用到整个正则表达式。它们不支持(?-ismx)语法,因为当模式修饰符应用于整个正则表达式时,关闭选项是无意义的。所有选项默认关闭。
您可以快速测试正在使用的正则表达式风格如何处理模式修饰符。正则表达式(αi)te(α-i)st应该匹配测试和TEst,但不匹配teST或TEST。