Java RegEx是否区分大小写?
在Java中,当执行replaceAll查找正则expression式模式时:
replaceAll("\\?i\\b(\\w+)\\b(\\s+\\1)+\\b", "$1"); (删除重复的连续不区分大小写的单词,例如testingtesting),我不知道我把它放在哪里。 我读到它应该是在开始,但是如果我把它拿出来,然后我抓住重复连续的单词(如testingtesting),但不区分大小写的话(如testingtesting)。 所以我想我可以在开始的时候添加?i,但是这似乎不能完成这项工作。 有什么想法吗? 谢谢!
RegexBuddy告诉我,如果你想把它包括在开头,这是正确的语法:
 "(?i)\\b(\\w+)\\b(\\s+\\1)+\\b" 
是的,可以在Java正则expression式中随意启用和禁用不区分大小写。
看起来你想要这样的东西:
  System.out.println( "Have a meRry MErrY Christmas ho Ho hO" .replaceAll("(?i)\\b(\\w+)(\\s+\\1)+\\b", "$1") ); // Have a meRry Christmas ho 
 请注意embedded的 Pattern.CASE_INSENSITIVE标志是(?i)不是\?i 。 还要注意,一个多余的\b已经从模式中删除。 
  (?i)放置在模式的开始处以启用不区分大小写。 在这种特殊情况下,它在模式后面不会被覆盖,所以实际上整个模式是不区分大小写的。 
 值得注意的是,事实上,您可以将大小写不敏感仅限于整个模式的一部分。 因此,把它放在什么地方的问题真的取决于规范(尽pipe对于这个特定的问题,这并不重要,因为\w是不区分大小写的。 
 为了演示,下面是一个类似"AaAaaA"字母"AaAaaA"为"A"例子。 
  System.out.println( "AaAaaA eeEeeE IiiIi OoooOo uuUuUuu" .replaceAll("(?i)\\b([AZ])\\1+\\b", "$1") ); // A e IO u 
 现在假设我们指定运行只有在以大写字母开头时才能被折叠。 那么我们必须把(?i)放在适当的地方: 
  System.out.println( "AaAaaA eeEeeE IiiIi OoooOo uuUuUuu" .replaceAll("\\b([AZ])(?i)\\1+\\b", "$1") ); // A eeEeeE IO uuUuUuu 
更一般地说,您可以根据需要启用和禁用模式中的任何标志。
也可以看看
-  java.util.regex.Pattern
-   regular-expressions.info/Modifiers
-   指定正则expression式中的模式
-  而不是/regex/i(Java中的Pattern.CASE_INSENSITIVE),你可以做/(?i)regex/
 
-  而不是
-   只有正则expression式的一部分打开和closures模式
-  你也可以/first(?i)second(?-i)third/
 
-  你也可以
-   修饰符跨度
-  你也可以做/first(?i:second)third/
 
-  你也可以做
 
-   指定正则expression式中的模式
-   regular-expressions.info/Word边界 (在\w和\s之间总是有一个\b)
相关问题
- 你可以只是正则expression式不区分大小写的一部分?
- 区分大小写,不区分大小写
你也可以匹配不区分大小写的正则expression式,并通过使用Pattern.CASE_INSENSITIVE常量来使其更具可读性:
 Pattern mypattern = Pattern.compile(MYREGEX, Pattern.CASE_INSENSITIVE); Matcher mymatcher= mypattern.matcher(mystring); 
如果您的整个expression式不区分大小写,您可以指定CASE_INSENSITIVE标志。
http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html
您也可以将您要检查模式匹配的初始string引导至小写字母。 并分别在你的模式中使用小写符号。