Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
6年前关闭。
我正在查看“重复单词”算法,发现使用了以下正则表达式的solution。
我试图通过使用以下站点http://public.kvalley.com/regex/regex.asp来解释正则表达式,但我很难受..有人可以为我分解正则表达式并向我解释吗?
您可能需要查看Java tutorials的正则表达式。所有这些都在这里解释。
边界的多种用途
如果您查看Boundary Matchers的Java教程,则会看到它与之匹配的内容,即单词的边界。由于这是在寻找重复的单词,因此要确保匹配项确实是整个单词,而不是包含该单词的单词。
不区分大小写
如Phsemo所提到的,使用此方法是为了使大小写不同的
再次如Phsemo所述,它可能代替
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
6年前关闭。
我正在查看“重复单词”算法,发现使用了以下正则表达式的solution。
(?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 tutorials的正则表达式。所有这些都在这里解释。
边界的多种用途
如果您查看Boundary Matchers的Java教程,则会看到它与之匹配的内容,即单词的边界。由于这是在寻找重复的单词,因此要确保匹配项确实是整个单词,而不是包含该单词的单词。
不区分大小写
如Phsemo所提到的,使用此方法是为了使大小写不同的
\\1
匹配组仍然匹配。即考虑句子中的第一个单词是否重复。[\\w\\W]*
的使用再次如Phsemo所述,它可能代替
.
(这是任何字符的正则表达式特殊字符,但不能保证与换行符See this匹配。.*
可以代替(?s)
还包括dotall标志*
),以便匹配换行符。以及的量词(0或更多),以便如果下一个单词是重复单词,则将其匹配,并且如果重复单词之间存在单词/字符,则将它们匹配。