1

把这个字符串

THX1138: The Movie

通过这个正则表达式

(.)(.)(\d)(\d+)

匹配这个

HX1138

通过从比赛中省略 T,它似乎是从右到左移动,但我认为默认是从左到右。例如,人们提出了一些问题,询问如何使正则表达式从右向左移动,所以我认为默认值是从左到右。通过添加另一个 (.)

(.)(.)(.)(\d)(\d+)

它匹配

THX1138

确认从右到左的观察。那么,如果有多个捕获组,是否有规则在第一次捕获后从右向左移动?

4

2 回答 2

5

让我们分解它们

  1. (.)(.)(\d)(\d+)

    (.): 匹配任何单个字符
    (.): 匹配任何单个字符
    (\d): 匹配任何单个数字
    (\d+): 匹配一个或多个数字。

    在您的字符串THX1138: The Movie中,从左到右移动,前三个字符无法匹配,因为X不是数字。所以它向前移动一个字符,并找到一个匹配:HX匹配“任何单个字符”的要求,1匹配“任何单个数字”,并且“138”被slurped到最后\d+

  2. (.)(.)(.)(\d)(\d+)

    (.): 匹配任何单个字符
    (.): 匹配任何单个字符
    (.): 匹配任何单个字符
    (\d): 匹配任何单个数字
    (\d+): 匹配一个或多个数字。

    现在,当它从左到右遍历您的字符串时,它会立即找到一个匹配项,因为T,HX都匹配“任何单个字符”,并且再次1匹配“任何单个数字”,并被138吞入最终的\d+.

于 2013-01-03T02:37:08.260 回答
1

问题是,从捕获与否开始THX1138无法匹配。正则表达式引擎不会导致匹配失败,而是返回两个匹配的唯一匹配项,后跟至少两位数字,也就是..\d\d+THX1138

于 2013-01-03T02:38:09.893 回答