2013-01-03 75 views
1

通过这个正则表达式把这个字符串REG前右至左

THX1138: The Movie 

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

匹配这个

HX1138 

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

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

它匹配

THX1138 

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

+0

谢谢,错字修正 – BrainLikeADullPencil

+2

它不是从右向左移动。它只是在整个输入中查找整个图案*,即从左到右。如果在索引0处没有找到匹配,那么它前进到'input.substr(1)',然后到'input.substr(2)',等等。 – inhan

回答

5

让我们打破他们

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

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

    通过你的字符串THX1138: The Movie移动,左到右,前三个字符不能比赛,因为X不是一个数字。所以它向前移动一个字符,并找到一个匹配:HX匹配'任何单个字符'的要求,1匹配'任何单个数字','138'匹配到最后的\d+

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

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

    现在,当它通过你的字符串,从左向右,它会立即找到匹配,因为THX全部匹配“任何单个字符”,并再次,1比赛“任何一个数字”,并138 sl into到最后的\d+

+0

感谢perreal击败了你一分钟,所以我接受了他的回答,但也赞成了你 – BrainLikeADullPencil

+0

@BrainLikeADullPencil:我打了他一分钟...... 49> 48.但无论如何。呃 – Flimzy

+0

哎呀,对不起。我修好了它。 – BrainLikeADullPencil

1

的事情是,THX1138无法比拟..\d\d+缴获T或无法启动。正则表达式引擎返回唯一匹配的两个数字,后面至少有两位数字,也就是HX1138

+0

谢谢。显而易见:(我的用户名说明了一切。 – BrainLikeADullPencil

+0

flimzy一分钟打败你,所以我接受了他的回答,但是提出了你的提议 – BrainLikeADullPencil