Can you make just part of a regex case-insensitive?我已经看到了很多使整个正则表达式不区分大小写的示例。我想知道的是让表达式的一部分不区分大小写。 例如,假设我有一个像这样的字符串:
如果我想匹配所有出现的" foo"(无论大小写),但我只想匹配大写的" BAR"怎么办? 理想的解决方案是可以在正则表达式中使用的解决方案,但我也想听听特定于语言的解决方案(谢谢Espo) 编辑 Espo提供的链接非常有帮助。那里有一个很好的例子,可以在表达式中打开和关闭修饰符。 对于我想做的示例,我可以执行以下操作:
这使得匹配仅对匹配的foo部分不区分大小写。 除Javascript,Python和其他一些(如Espo所述)外,这似乎在大多数正则表达式实现中均有效。 我所想知道的大公司(Perl,PHP,.NET)都支持内联模式更改。 Perl使您可以使用(?i :)模式修饰符使正则表达式的一部分不区分大小写。 现代的regex风格允许您仅将修饰符应用于正则表达式的一部分。如果在正则表达式的中间插入修饰符(?ism),则修饰符仅适用于修饰符右侧的正则表达式部分。您可以通过在模式前面加上减号来关闭模式。减号后的所有模式将关闭。例如。 (?i-sm)打开不区分大小写的功能,并同时关闭单行模式和多行模式。 并非所有的正则表达式都支持此功能。 JavaScript和Python将所有模式修饰符应用于整个正则表达式。它们不支持(?-ismx)语法,因为当模式修饰符应用于整个正则表达式时,关闭选项毫无意义。默认情况下,所有选项都是关闭的。 您可以快速测试您使用的正则表达式味道如何处理模式修饰符。正则表达式(?i)te(?-i)st应该匹配test和TEst,但不能匹配teST或TEST。 资源
不幸的是,不区分大小写的匹配的语法并不常见。 您使用什么语言?执行此操作的标准方法是// [[Ff] [Oo] {2} | BAR)/,并且区分大小写,但是例如在Java中,有区分大小写修饰符(?i)可以使所有右边的字符不区分大小写,而(?-i)则强制敏感。该Java regex修饰符的示例可以在此处找到。 你可以用
.Net括号中的?:表示不捕捉,仅用于将|的术语分组。 (或)声明。 |