放入此字符串
THX1138: The Movie
通过这个正则表达式
(.)(.)(\d)(\d+)
匹配此
HX1138
通过从比赛中省略T,它似乎从右向左移动,但我认为默认是从左到右。例如,有人问如何让正则表达式从右向左移动,所以我认为默认是从左到右。通过添加另一个(。)
(.)(.)(.)(\d)(\d+)
匹配
THX1138
确认从右到左观察。因此,如果有多个捕获组,它会在第一次捕获后从右向左移动吗?
答案 0 :(得分:5)
让我们分解它们
(.)(.)(\d)(\d+)
(.)
:匹配任何单个字符
(.)
:匹配任何单个字符
(\d)
:匹配任何单个数字
(\d+)
:匹配一个或多个数字。
从左到右移动字符串THX1138: The Movie
,前三个字符无法匹配,因为X
不是数字。所以它向前移动一个字符并找到一个匹配:H
和X
匹配“任何单个字符”的要求,1
匹配“任何单个数字”,“138”是匆匆进入决赛\d+
。
(.)(.)(.)(\d)(\d+)
(.)
:匹配任何单个字符
(.)
:匹配任何单个字符
(.)
:匹配任何单个字符
(\d)
:匹配任何单个数字
(\d+)
:匹配一个或多个数字。
现在当它从字符串中经过,从左到右,它会立即找到匹配项,因为T
,H
和X
都匹配“任何单个字符”,并且再次,1
匹配“任何单个数字”,138
被插入最终的\d+
。
答案 1 :(得分:1)
问题是,THX1138
无法匹配..\d\d+
从T
开始捕获与否。 regex引擎返回唯一的匹配,而不是失败的匹配,然后至少两个数字,即HX1138