说我有两个字符串,
String s1 = "AbBaCca";
String s2 = "bac";
Run Code Online (Sandbox Code Playgroud)
我想执行一个s2包含在其中的检查返回s1.我可以这样做:
return s1.contains(s2);
Run Code Online (Sandbox Code Playgroud)
我很确定这contains()是区分大小写的,但是我无法通过阅读文档来确定这一点.如果是,那么我想我最好的方法是这样的:
return s1.toLowerCase().contains(s2.toLowerCase());
Run Code Online (Sandbox Code Playgroud)
除此之外,还有另一种(可能更好的)方法来实现这一目标而不关心区分大小写吗?
我已经看到很多关于使整个正则表达式不区分大小写的例子.我想知道的是只有部分表达式不区分大小写.
例如,假设我有一个这样的字符串:
fooFOOfOoFoOBARBARbarbarbAr
Run Code Online (Sandbox Code Playgroud)
如果我想匹配所有出现的"foo"而不管大小写但我只想匹配大写的"BAR"怎么办?
理想的解决方案是适用于正则表达式的东西,但我也有兴趣听到语言特定的(感谢Espo)
编辑
Espo提供的链接非常有用.关于在表达式中打开和关闭修改器的例子很好.
对于我做作的例子,我可以这样做:
(?i)foo*(?-i)|BAR
Run Code Online (Sandbox Code Playgroud)
这使得匹配仅对匹配的foo部分不区分大小写.
这似乎适用于大多数正则表达式实现,除了Javascript,Python和其他一些(如Espo提到的).
我想知道的大问题(Perl,PHP,.NET)都支持内联模式更改.
感谢我以前的作业问题的帮助Regex to match tags like <A>, <BB>, <CCC> but not <ABC>,但现在我有另一个功课问题.
我需要匹配标签<LOL>,<LOLOLOL>(3个大写字母,最后两个字母可重复),但不是<lol>(需要大写).
使用以前的作业技术,我试过<[A-Z]([A-Z][A-Z])\1*>.这是有效的,除了还有一个额外的问题:重复部分可以是大小写混合!
所以我还需要匹配<LOLolol>,<LOLOLOlol>因为它是3个大写字母,在大小写混合的情况下可重复的最后两个字母.我知道你可以创建一个不区分大小写的模式/i,这将让我与我<LOLolol>的正则表达式匹配,但它现在也匹配<lololol>,因为前3个字母的检查也不区分大小写.
那我该怎么做?如何敏感地检查前三个字母,然后其他字母不区分大小写?正则表达式可以实现吗?