Cry*_*tal 98 java regex case-sensitive
在Java中,当执行replaceAll来查找正则表达式模式时:
replaceAll("\\?i\\b(\\w+)\\b(\\s+\\1)+\\b", "$1");
Run Code Online (Sandbox Code Playgroud)
(为了删除重复的连续不区分大小写的单词,例如测试测试),我不知道我把它放在哪里?i.我读到它应该在开头,但是如果我把它取出然后我会捕获重复的连续单词(例如测试测试),但不是不区分大小写的单词(例如测试测试).所以我想我可以在开头添加?i但似乎没有完成工作.有什么想法吗?谢谢!
Chr*_*lma 147
您还可以使用Pattern.CASE_INSENSITIVE常量匹配不区分大小写的正则表达式并使其更具可读性,如:
Pattern mypattern = Pattern.compile(MYREGEX, Pattern.CASE_INSENSITIVE);
Matcher mymatcher= mypattern.matcher(mystring);
Run Code Online (Sandbox Code Playgroud)
pol*_*nts 121
是的,可以在Java正则表达式中随意启用和禁用不区分大小写.
看起来你想要这样的东西:
System.out.println(
"Have a meRry MErrY Christmas ho Ho hO"
.replaceAll("(?i)\\b(\\w+)(\\s+\\1)+\\b", "$1")
);
// Have a meRry Christmas ho
Run Code Online (Sandbox Code Playgroud)
请注意,嵌入 Pattern.CASE_INSENSITIVE
标志(?i)
不是\?i
.还要注意,\b
已从模式中删除了一个多余的.
在(?i)
被放置在使不区分大小写的图案的开始.在这种特殊情况下,它不会在模式中稍后重写,因此实际上整个模式不区分大小写.
值得注意的是,事实上,您可以将不区分大小写的内容仅限于整个模式的一部分.因此,放置它的位置的问题实际上取决于规范(尽管对于这个特定的问题,它并不重要,因为它不\w
区分大小写.
为了演示,这里倒塌的信件就像一条流淌的一个类似的例子"AaAaaA"
,只是"A"
.
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("(?i)\\b([A-Z])\\1+\\b", "$1")
); // A e I O u
Run Code Online (Sandbox Code Playgroud)
现在假设我们指定只有在以大写字母开头时才应折叠运行.然后我们必须把它(?i)
放在适当的地方:
System.out.println(
"AaAaaA eeEeeE IiiIi OoooOo uuUuUuu"
.replaceAll("\\b([A-Z])(?i)\\1+\\b", "$1")
); // A eeEeeE I O uuUuUuu
Run Code Online (Sandbox Code Playgroud)
更一般地,您可以根据需要启用和禁用模式中的任何标志.
java.util.regex.Pattern
/regex/i
(Pattern.CASE_INSENSITIVE
在Java中),你可以做到/(?i)regex/
/first(?i)second(?-i)third/
/first(?i:second)third/
\b
a \w
和a 之间总是存在\s
)cna*_*ney 108
RegexBuddy告诉我你是否想在开头包含它,这是正确的语法:
"(?i)\\b(\\w+)\\b(\\s+\\1)+\\b"
Run Code Online (Sandbox Code Playgroud)
rel*_*let 23
如果整个表达式不区分大小写,则只需指定CASE_INSENSITIVE
标志:
Pattern.compile(regexp, Pattern.CASE_INSENSITIVE)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
127950 次 |
最近记录: |