当前位置:  开发笔记 > 编程语言 > 正文

你能不能只对正则表达式不区分大小写的一部分吗?

如何解决《你能不能只对正则表达式不区分大小写的一部分吗?》经验,为你挑选了3个好方法。

我已经看到很多关于使整个正则表达式不区分大小写的例子.我想知道的是只有部分表达式不区分大小写.

例如,假设我有一个这样的字符串:

fooFOOfOoFoOBARBARbarbarbAr

如果我想匹配所有出现的"foo"而不管大小写但我只想匹配大写的"BAR"怎么办?

理想的解决方案是适用于正则表达式的东西,但我也有兴趣听到语言特定的(感谢Espo)

编辑

Espo提供的链接非常有用.关于在表达式中打开和关闭修改器的例子很好.

对于我做作的例子,我可以这样做:

(?i)foo*(?-i)|BAR

这使得匹配仅对匹配的foo部分不区分大小写.

这似乎适用于大多数正则表达式实现,除了Javascript,Python和其他一些(如Espo提到的).

我想知道的大问题(Perl,PHP,.NET)都支持内联模式更改.



1> Espo..:

Perl允许您通过使用(?i :)模式修饰符使正则表达式的一部分不区分大小写.

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

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

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

资源



2> akdom..:

你用的是哪种语言?执行此操作的标准方法类似于/([Ff] [Oo] {2} | BAR)/具有区分大小写,但在Java中,例如,有一个区分大小写修饰符(?i),它使所有它右边的字符不区分大小写和(?-i)强制敏感.可以在此处找到Java正则表达式修饰符的示例.


@NonaUrbiz:因为表达式`(?i)foobar`比`[Ff] [Oo] {2} [Bb] [Aa] [Rr]更具可读性

3> aku..:

不幸的是,不区分大小写匹配的语法并不常见.在.NET中,您可以使用RegexOptions.IgnoreCase标志或?i修饰符

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有