Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解释下面的正则表达式_Java_Regex - Fatal编程技术网

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说