Regex 无法理解2-5个字母回文的正则表达式?
我不熟悉正则表达式。我正在努力理解解释回文的代码。下面是表达式Regex 无法理解2-5个字母回文的正则表达式?,regex,Regex,我不熟悉正则表达式。我正在努力理解解释回文的代码。下面是表达式 \\b(\\w)?(\\w)\\w?\\2\\1 这个表达式是匹配的 my "dad" "sees" a "kayak" at "noon" 我有点直觉,比如 \\b -ensures that you are at the beginning of the sentence. \\w -ensures that it is a word character and it is captured into group1
\\b(\\w)?(\\w)\\w?\\2\\1
这个表达式是匹配的
my "dad" "sees" a "kayak" at "noon"
我有点直觉,比如
\\b -ensures that you are at the beginning of the sentence.
\\w -ensures that it is a word character and it is captured into group1
? does it make (\\w) optional ..because i read some where that if you
put '?' in front of a token,it makes the token optional ex:https? will
match "http" as well
\\2 - for matching the second group
\\1 - for matching the first..
what bothers me is "(\\w)\\w?" which is making me difficult to understand
the expression.Any help will be appreciated.
回文可以有偶数或奇数个字母。当时间为偶数时,如“中午”,上半部分的所有字母都会重复。不带括号的可选
\\w?
用于不重复中间字母的奇数情况。也就是说,使用“kayak”时,y不会重复,因此以后不需要反向引用。上述正则表达式仅在JavaScript中使用(2-5个字符的回文前缀)。在Java、Ruby、Python、PCRE、Perl(可能还有许多其他版本)中,正则表达式只匹配4-5个字符的回文前缀 正则表达式在JavaScript中工作,因为如果相应的捕获组不匹配任何内容(未定义/null),JavaScript中的反向引用将匹配一个空字符串,而不是像在大多数情况下那样失败匹配 给定字符串
aba
,在JavaScript中:
匹配空字符串。捕获组1未定义,因为我们在没有(\w)?
的情况下获取分支(\w)
匹配第一个(\w)
并将捕获组2设置为a
a
匹配\w?
b
引用捕获组2并匹配\2
a
匹配空字符串,因为未定义捕获组1\1
\b(\w?)(\w)\w?\2\1
^
通过将可选量词放入其中,捕获组1始终捕获某些内容(可以是单词字符或空字符串,但不能是未定义的/null)
给定输入
aba
,第一个捕获组现在捕获一个空字符串,因此\1
匹配一个空字符串,并且匹配在上面列出的任何引擎上成功。顺便说一句,您的正则表达式是:\b(\w)?(\w)\w?\2\1
。额外的反斜杠只是将正则表达式嵌入到任何语言中的一部分——可能是Java。@SteveBennett:它不适用于Java中的2和3字母回文。仅在JavaScript中。如果第一个?
在捕获组内移动。它将在Java中工作。这是因为JavaScript中的\1
匹配空字符串(如果未捕获任何内容),而Java(和许多其他风格)在这种情况下总是失败。哦,这是JavaScript吗?在这种情况下,您可以通过在正斜杠中表示正则表达式来简化操作:/\b(\w)?(\w)\w?\2\1/
-这对您的问题没有帮助。:)目前,ideone和regexplanet在Perl上显示了这个正则表达式的奇怪结果。可能是个虫子。下面是指向我的要点的链接,显示了不同版本Perl上的不同结果: