正则表达式匹配重复两次的单词(即你好你好你好)

时间:2014-04-08 01:39:15

标签: java regex word-boundary

我有一个由我的CS2讲师给出的java正则表达式,它检查一个单词是否重复:

\\b(\\w+)\\s+\\1\\b

如何修改此项以检查某个单词是否重复两次,如" hello hello hello"或者"你好世界你好你好"

如果可能的话,我只是想指出正确的方向,而不是一个彻头彻尾的解决方案(毕竟,我需要学习这个)。我认为我的问题是我不能很好地理解单词边界。

2 个答案:

答案 0 :(得分:1)

首先,您需要弄清楚您给出的表达式的解剖结构。它描述了一个字符串,捕获一个非空的单词字符序列(\\w+),从一个单词边界开始,后跟一个非空的空格序列\\s+,接下来是捕获组的内容,不是更长词的一部分(这是\\b在表达式结尾处所做的事情。)

接下来,您需要构建一个正则表达式来描述"一个可能为空的单词字符和空格序列"。那将是(?:\\w|\\s)*

现在你已经准备好表达你的意思了。你需要这些部分:

  • 与字边界开始和结束的单词字符序列匹配的捕获组
  • 可能为空的单词字符序列和以字边界结尾的空格
  • 以字边界结束的捕获序列的值
  • 另一个可能为空的单词字符和空格序列,以字边界结尾
  • 以字边界结束的捕获序列的值

答案 1 :(得分:0)

好吧,因为你似乎想自己学习这个,我会给你一个有用的Oracle Link.其次我建议你注意你到底想要达到的目标,一个三个相同的模式。希望有帮助并且不太明显。如果您需要更多帮助,请发表评论。

编辑:抱歉,我忘记了第二个链接here.此页面也很有帮助。