java - 编写正则表达式来查找连续字符 'o'

标签 java regex

我编写了一个正则表达式来检测单词末尾的重复o。这是我的正则表达式;

Pattern p = Pattern.compile(".*[o]\\1+");

例如,如果我有一个单词 zoomasookjuoo,则应该检测到它,并且是否有一个名为 的单词eooploopsnoop 它不应该被检测到,因为它应该只检测以 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/

相关文章:

Java "?"检查 null 的运算符 - 它是什么? (不是三元!)

java - Android有 "onInstall"方法吗?

java - 如何解决嵌套 map 函数中的 SPARK-5063

regex - egrep\b 无法识别单引号

php正则表达式过滤数据

java - 更改设备上的时间 => 在游戏中作弊

java - 使用来自另一个类/Activity 的适配器

java - 使用 java 正则表达式匹配器时出现意外结果

Java - 扫描逗号分隔的 double 值和整数值

javascript - 正则表达式 "AND"