2014-02-23 555 views
4

有人可以讓我愚蠢的表達這個表達並提供這個表達的意義組合...我想我知道每個字符的意思是什麼,但它返回的是什麼(作爲一個完整的表達式)是我想用純樸簡單的英語來理解:)普通英語和簡單英語中[^ K] + name ?=([^'] *)的含義

[^ K] + name \?=([^'] *)

感謝

編輯:請參閱下面的圖片:http://i.imgur.com/0bDhJmp.png

爲什麼它返回「name」(peterandjohn)的第二個實例而不是第一個「Mark = Scoobidooo」?

THX

EDIT2:

enter image description here

+1

http://www.regexper.com/#%5B%5EK%5D%2Bname%5C%3F%3D(%5B%5E'%5D*) – MarcinJuraszek

+0

這有什麼用?該鏈接缺少關閉paren,只會產生一條錯誤消息。 – tripleee

回答

2

發生這種情況,因爲 '+' 量詞是 「貪婪」 - 它會嘗試儘可能多的匹配因爲它可能可以(即使它已經找到匹配)在正則表達式的下一部分可以匹配之前。

在通俗地說,[^K]+不會僅僅停留在

匹配 「輸出: '名=馬克= scobidoo'」,因爲 「名稱=馬克 ...?」

以下它也匹配由[^ K] +(請記住,您已將您的正則表達式區分大小寫,這就是爲什麼Mark中的'k'匹配[^K]+)。 [^K]+將終止在「輸出:'名稱?= peteandjohn'`」停止匹配,因爲這是我們仍然可以匹配其餘正則表達式的最後一個位置,即「name \?=([^'] *)」。

+0

優秀的解釋!謝謝你跳槽..正是我在找什麼。乾杯!現在這裏又是一個轉折,如果我想確保只有第二個返回「peteandjohn」,那麼在上面的示例代碼中,正則表達式看起來像什麼?再次感謝... – user2957951

+0

是不是當前的正則表達式返回第二個名字?或者你的意思是你想要返回第一個名字? –

+0

你是對的,但讓我們說出於參數的緣故,MarK中的K是大寫,並且在名稱?=的兩個實例(外觀)中的所有代碼都是相同的嗎?是否存在光滑的方式來返回peteandjohn? (請參閱edit2下面的示例) – user2957951

4

正則表達式:[^K]+name\?=([^']*)

NODE      EXPLANATION 
-------------------------------------------------------------------------------- 
    [^K]+     any character except: 'K' (1 or more times 
          (matching the most amount possible)) 
-------------------------------------------------------------------------------- 
    name      'name' 
-------------------------------------------------------------------------------- 
    \?      '?' 
-------------------------------------------------------------------------------- 
    =      '=' 
-------------------------------------------------------------------------------- 
    (      group and capture to \1: 
-------------------------------------------------------------------------------- 
    [^']*     any character except: ''' (0 or more 
          times (matching the most amount 
          possible)) 
-------------------------------------------------------------------------------- 
)      end of \1 
+0

謝謝。正如我所提到的,我知道每個字符的含義,但是綜合表達式就是我努力想要理解的東西:(也許一個例子會幫助:)乾杯! – user2957951

+0

查看上面的修改。我已經添加了一個例子.... – user2957951