我正在研究"重复单词"算法,我找到了使用以下正则表达式的解决方案。
(?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 所述,这可能用于代替 .
(这是任何字符的正则表达式特殊字符,但这不保证匹配换行符请参阅此。 如果还包含 dotall 标志(?s)
),则可以使用 .*
来代替它,以便匹配换行符。和*
的量词(0 或更多),以便如果下一个单词是重复的,那么它是匹配的,如果重复之间有单词/字符,它们也会匹配。