0

我正在查看“重复单词”算法,并找到了一个使用以下正则表达式的解决方案。

(?i)\\b(\\w+)\\b[\\w\\W]*\\b\\1\\b

我试图通过使用以下站点http://public.kvalley.com/regex/regex.asp来解释正则表达式,但我很难.. 有人可以为我分解正则表达式并向我解释吗?

4

1 回答 1

9
 (?i)      - case insensitive flag
 \\b       - word boundary
 (\\w+)    - 1 or more word characters (A-Z, a-z, 0-9) in a captured group
 \\b       - word boundary
 [\\w\\W]* - 0 or more word or non-word characters
 \\b       - word boundary
 \\1       - the group previously captured
 \\b       - word boundary

您可能想查看正则表达式的Java 教程。所有这些都在那里解释。

边界的多种用途
如果您查看边界匹配器的 Java 教程,您将看到它匹配的是什么,即单词的边界。由于这是在寻找重复的单词,因此它确保匹配确实是整个单词而不是包含该单词的单词。

不区分大小写
正如 Phsemo 所提到的,使用它以便\\1匹配组在大小写不同的情况下仍然匹配。即考虑是否重复句子中的第一个单词。

[\\w\\W]*
Phsemo提到.的,使用Again包括),以便匹配换行符。以及 (0 或更多)的量词,以便如果下一个单词是重复的,则匹配它,并且如果重复之间有单词/字符,则它们匹配。.*(?s)*

于 2013-10-14T22:33:53.630 回答