我编写了一个正则表达式来检测单词末尾的重复o
。这是我的正则表达式;
Pattern p = Pattern.compile(".*[o]\\1+");
例如,如果我有一个单词 zoo
、masoo
或 kjuoo
,则应该检测到它,并且是否有一个名为 的单词eoop
、loop
或 snoop
它不应该被检测到,因为它应该只检测以 oo
结尾的单词(2 o
's)
我该如何解决这个问题?
最佳答案
您应该在末尾添加一个$
,以匹配末尾的内容。并且您需要捕获o
,而不是使用括号。 字符类不会捕获匹配,并且 \\1
在这种情况下不会给您任何结果。
此外,由于您只担心末尾的 o
,因此可以从开头删除 .*
并使用 Matcher#find()
而不是Matcher#matches()
。所以,你的正则表达式应该是:
Pattern p = Pattern.compile("(o)\\1+$");
或者,您可以直接将 {n,m}
量词与 o
一起使用,将第二个参数保留为空,以匹配 2 个或多个 o
:
Pattern p = Pattern.compile("o{2,}$");
<小时/>
It should ONLY detect words ending with oo (2 o's)
如果您只想匹配 2 个 o
,则可以从反向引用中删除量词 +
:
Pattern p = Pattern.compile("(o)\\1$");
或者简单地使用不同的量词 - {n}
:
Pattern p = Pattern.compile("o{2}$");
<小时/>
示例代码:
Pattern p = Pattern.compile("o{2}$");
String[] words = {"zoo", "kjuoo", "snoop", "loop"};
for (String word: words) {
Matcher matcher = p.matcher(word);
System.out.println(word + " : " + matcher.find()); // Use `find()`
}
输出:
zoo : true
kjuoo : true
snoop : false
loop : false
关于java - 编写正则表达式来查找连续字符 'o',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17809287/