[英]Java Regex pattern that matches in any online tester but doesn't in Eclipse
[英]Regex: Escaped pattern in Eclipse, doesn't matches the same words as before
我正在codewars.com上从事KATA的工作,任务是用your sister
替换字符串中出现的任何you
, u
和youuu
(不限数量)。
我有工作代码,并在正则表达式之后找出了youuuu
的情况
(您* [\\ s \\ W])
现在在eclipse中,我需要转义“ \\”,因此表达式类似于:
(您* [\\\\ s \\\\ W])
但是,这与之前的表达式不匹配。
这是我的代码:
public static String autocorrect(String input) {
String[] splittedInput = input.split(" ");
StringBuilder formattedString = new StringBuilder();
for (String word : splittedInput){
switch (word) {
case "u":
formattedString.append("your sister");
break;
case "you":
formattedString.append("your sister");
break;
default:
if (word.matches("(you*[\\s\\W])")){
formattedString.append("your sister");
}
else {
formattedString.append(word);
}
}
formattedString.append(" ");
}
return formattedString.toString();
}
它不再与诸如youuuuuuu
或youu
或youu
类的youuuuuuu
匹配...如果它在在线Regex-Tester中工作,为什么在Eclipse中不起作用?
在Java中,当您使用matches()
它会自动追加到正则表达式$
的前面,并在结尾的^
后面,就像您要匹配整个单词一样。 您可以使用Matcher
和Pattern
更好地解决这个问题。
您的正则表达式(you*[\\\\s\\\\W])
匹配包含yo
字符串,后跟任意数量的u
(也可以为零),然后是必需的空格或非单词字符。
您可能希望将其更改为如下所示:
(you+[\\s\\W]?)
但是,您的初始表达式应该与您匹配youu!
已经与您的描述相反。
另外,您可能还希望使用Matcher
来将字符串中的子序列与您的模式进行匹配,如其他答案之一所述:
final Pattern pattern = Pattern.compile("(you+[\\s\\W]?)");
final Matcher matcher = pattern.matcher("youuuuuu!");
matcher.find();
模式的末尾包含空格或非单词字符。 没有这样的角色,就不会匹配。 另外请注意,您在拆分“”开头,所以通过“youu”来autocorrect
将匹配与模式“分裂后youu”,这将不匹配,因为没有结尾没有空白了。
除此之外,您的函数似乎已经实现了预期的功能,只是您似乎需要使用+
而不是*
来匹配至少一个u
才能符合您所陈述的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.