正则表达从右到左

时间:2013-01-03 02:30:39

标签: regex

放入此字符串

THX1138: The Movie

通过这个正则表达式

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

匹配此

HX1138

通过从比赛中省略T,它似乎从右向左移动,但我认为默认是从左到右。例如,有人问如何让正则表达式从右向左移动,所以我认为默认是从左到右。通过添加另一个(。)

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

匹配

THX1138

确认从右到左观察。因此,如果有多个捕获组,它会在第一次捕获后从右向左移动吗?

2 个答案:

答案 0 :(得分:5)

让我们分解它们

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

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

    从左到右移动字符串THX1138: The Movie,前三个字符无法匹配,因为X不是数字。所以它向前移动一个字符并找到一个匹配:HX匹配“任何单个字符”的要求,1匹配“任何单个数字”,“138”是匆匆进入决赛\d+

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

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

    现在当它从字符串中经过,从左到右,它会立即找到匹配项,因为THX都匹配“任何单个字符”,并且再次,1匹配“任何单个数字”,138被插入最终的\d+

答案 1 :(得分:1)

问题是,THX1138无法匹配..\d\d+T开始捕获与否。 regex引擎返回唯一的匹配,而不是失败的匹配,然后至少两个数字,即HX1138