Java 解释下面的正则表达式
我正在研究“重复单词”算法,发现了一个使用以下正则表达式的算法Java 解释下面的正则表达式,java,regex,Java,Regex,我正在研究“重复单词”算法,发现了一个使用以下正则表达式的算法 (?i)\\b(\\w+)\\b[\\w\\w]*\\b\\1\\b 我试图用下面的网站来解释正则表达式,但我遇到了困难。。有人能帮我把正则表达式分解一下,给我解释一下吗 (?i) - case insensitive flag \\b - word boundary (\\w+) - 1 or more word characters (A-Z, a-z, 0-9) in a captured g
(?i)\\b(\\w+)\\b[\\w\\w]*\\b\\1\\b
我试图用下面的网站来解释正则表达式,但我遇到了困难。。有人能帮我把正则表达式分解一下,给我解释一下吗
(?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教程,您将看到它匹配的内容,即单词的边界。因为这是在寻找重复的单词,所以它确保匹配的确实是整个单词,而不是包含该单词的单词 不区分大小写
如Phsemo所述,如果情况不同,
\\1
匹配组与仍然匹配。考虑句子中的第一个单词是否重复。
使用[\\w\\w]*
同样,正如Phsemo所提到的,这可能是用来代替
(这是任何字符的正则表达式特殊字符,除非它不能保证匹配换行符。*
,如果还包括dotall标志(?s)
),则可以使用,以便匹配换行符。以及*
(0或更多)的量词,这样,如果下一个单词是重复的,那么它将被匹配,并且如果在重复的单词/字符之间有匹配的单词/字符。是否最好实际提出您可以理解和维护的解决方案?同时搜索“explain regexp”我会给你指出像这样的网站,老实说,这些网站很可能会告诉你这个问题的答案。(只需确保毫无疑问的反斜杠,这是Javaism,而不是实际的重新语法。)很好,简单+1。也可能使用了[\\w\\w]
而不是
来匹配新行字符。另外,如果有人想知道为什么这里使用(?i)
,是为了让\\1
匹配不区分大小写的第一组字符。有时在语言中,我看到类似/regex/i
的东西不区分大小写。这些语言是否允许您使用/(?i)regEx/
作为同义词?这两者之间有什么区别?如果您能解释为什么多次使用\b
,是否可能?为什么使用[w\w]
等?@tieTYT什么语言?“我不能说我以前见过这种情况,但我猜这将取决于语言。”JavaDevil说