我正在查看“重复单词”算法,并找到了一个使用以下正则表达式的解决方案。
(?i)\\b(\\w+)\\b[\\w\\W]*\\b\\1\\b
我试图通过使用以下站点http://public.kvalley.com/regex/regex.asp来解释正则表达式,但我很难.. 有人可以为我分解正则表达式并向我解释吗?
我正在查看“重复单词”算法,并找到了一个使用以下正则表达式的解决方案。
(?i)\\b(\\w+)\\b[\\w\\W]*\\b\\1\\b
我试图通过使用以下站点http://public.kvalley.com/regex/regex.asp来解释正则表达式,但我很难.. 有人可以为我分解正则表达式并向我解释吗?
(?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)
*