1

以下正则表达式有效吗?如果是这样,它有什么作用?

.*(.)(.)(.)(.)\4\3\2\1.*

似乎找不到任何关于转义数字的信息,为什么是四个 (.) ?

摘自最近在Slashdot上列出的 Regex Sudoku/Crossword 谜题

4

2 回答 2

3

它不是逃避数字;有许多正则表达式库使用该\#符号来引用特定的捕获组。即,\1是第一个捕获的组。

(.)每个捕获组,所以这将匹配类似

abcddcba

于 2013-02-28T01:39:23.613 回答
2

它看起来是有效的,是的,并且简单地说,“匹配零个或多个字符,后跟任意四个字符,然后是相同的四个字符,反转,后跟零个或多个字符”。

  • .*= 任何字符出现零次或多次
  • (.)(.)(.)(.)= 任意四个字符(并“捕获”每个字符以供以后参考)
  • \4\3\2\1= 匹配捕获的第四个字符,然后是第 3 个、第 2 个、第 1 个
  • .*= 任何字符出现零次或多次

这些都是与 RegEx 匹配的示例:

  • aweqwe12344321
  • 12344321asdfas
  • 12344321
  • asdf12344321asdf
于 2013-02-28T01:45:38.420 回答