java - 当输入字符串为 abccabaaaccbbbc 时,为什么 Java 正则表达式模式 "[abc]{3}"与 abc 匹配

标签 java regex

在关注 http://docs.oracle.com/javase/tutorial/essential/regex/quant.html 的 Oracle 教程时。

发现以下命令行程序http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/essential/regex/examples/RegexTestHarness.java输出:

输入您的正则表达式:[abc]{3}

输入要搜索的输入字符串:abccabaaaccbbbc

我发现文本“abc”从索引 0 开始,到索引 3 结束。

我发现文本“cab”从索引 3 开始,到索引 6 结束。

我发现文本“aaa”从索引 6 开始,到索引 9 结束。

我发现文本“ccb”从索引 9 开始,到索引 12 结束。

我发现文本“bbc”从索引 12 开始,到索引 15 结束。

我的期望是模式 [abc]{3} 表示 abc> 三次但整体匹配abc为什么?

最佳答案

您正在寻找的模式是:

a{3}|b{3}|c{3}

您的模式意味着 - 匹配长度为 3 的字符串,其中包含任何字符 abc.

此外,正如@Tim 在评论中指出的那样,这可以简化为:

([abc])\1\1

([abc]) 匹配单个字符,并将其捕获到组 1 中。然后 \1\1 表示重复同一字符两次。

关于java - 当输入字符串为 abccabaaaccbbbc 时,为什么 Java 正则表达式模式 "[abc]{3}"与 abc 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28678857/

相关文章:

Java - 如何从字符串中删除尖括号和文本

regex - Windows cmd脚本从jar文件中提取版本号

ruby - 用正则表达式删除单词

javascript - 如何检查字符串是否有数字?

regex - 您如何发现 spark 数据框中列格式的异常?

java - 如何使用 Spring AOP 强制使用通用日志格式。想要附加一个字符串,例如每个记录器中的服务名称

java - Osgi getService()

java - 提取包含特定子字符串的每个完整单词

java - 如何在基于 java 的 Web 应用程序中覆盖重复的 http 缓存 header ?

java - 如何在 ListView 中显示多个 TextView 标题?