我已经看到很多关于使整个正则表达式不区分大小写的例子.我想知道的是只有部分表达式不区分大小写.
例如,假设我有一个这样的字符串:
fooFOOfOoFoOBARBARbarbarbAr
如果我想匹配所有出现的"foo"而不管大小写但我只想匹配大写的"BAR"怎么办?
理想的解决方案是适用于正则表达式的东西,但我也有兴趣听到语言特定的(感谢Espo)
编辑
Espo提供的链接非常有用.关于在表达式中打开和关闭修改器的例子很好.
对于我做作的例子,我可以这样做:
(?i)foo*(?-i)|BAR
这使得匹配仅对匹配的foo部分不区分大小写.
这似乎适用于大多数正则表达式实现,除了Javascript,Python和其他一些(如Espo提到的).
我想知道的大问题(Perl,PHP,.NET)都支持内联模式更改.
Perl允许您通过使用(?i :)模式修饰符使正则表达式的一部分不区分大小写.
现代正则表达式风格允许您仅将修饰符应用于正则表达式的一部分.如果在正则表达式的中间插入修饰符(?ism),则修饰符仅适用于修饰符右侧的正则表达式部分.您可以通过在前面加上减号来关闭模式.减号后的所有模式都将关闭.例如(?i-sm)打开不区分大小写,并关闭单线模式和多线模式.
并非所有正则表达式都支持这一点.JavaScript和Python将所有模式修饰符应用于整个正则表达式.它们不支持(?-ismx)语法,因为当模式修饰符应用于整个正则表达式时,关闭选项毫无意义.默认情况下,所有选项均已关闭
您可以快速测试正在使用的正则表达式处理模式修饰符的方式.正则表达式(?i)te(? - i)st应匹配test和TEst,但不匹配teST或TEST.
资源
你用的是哪种语言?执行此操作的标准方法类似于/([Ff] [Oo] {2} | BAR)/具有区分大小写,但在Java中,例如,有一个区分大小写修饰符(?i),它使所有它右边的字符不区分大小写和(?-i)强制敏感.可以在此处找到Java正则表达式修饰符的示例.
不幸的是,不区分大小写匹配的语法并不常见.在.NET中,您可以使用RegexOptions.IgnoreCase标志或?i修饰符