Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
                            
                        
                    
                
            
                    
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? 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或更多),以便如果下一个单词是重复单词,则将其匹配,并且如果重复单词之间存在单词/字符,则将它们匹配。

10-04 11:55
查看更多