2013-01-03 72 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