2011-10-10 167 views
1

有人可以向我解釋這種模式的含義。preg_match字符串

preg_match(/'^(d{1,2}([a-z]+))(?:s*)S (?=200[0-9])/','21st March 2006','$matches);

所以糾正我,如果我錯了:

^  = beginning of the line 
    d{1,2} = digit with minimum 1 and maximum 2 digits 
    ([a-z]+) = one or more letters from a-z 
    (?:s*)S = no idea... 
    (?=  = no idea... 
    200[0-9] = a number, starting with 200 and ending with a number (0-9) 

有人能完成這個名單?

+2

我們不是缺少d,S,S之前反斜槓等等? –

+0

我明白了你的觀點,但沒有。這本書並沒有提到反斜槓...... – Michiel

+0

然後不要相信這本書;) –

回答

2

這裏是strfriend一個不錯的圖提供:

^(d{1,2}([a-z]+))(?:s*)S (?=200[0-9])

但我認爲你可能是指^(\d{1,2}([a-z]+))(?:\s*)\S (?=200[0-9])用反斜槓,這給this diagram

^(\d{1,2}([a-z]+))(?:\s*)\S (?=200[0-9])

也就是說,這個正則表達式匹配字符串的開頭,後跟一個或兩個數字,一個或多個小寫字母,零個或多個空白字符acters,一個非空白字符和一個空格。此外,所有這些都必須在2000年到2009年之間加上一個數字,儘管這個數字實際上並沒有與正則表達式—相匹配,但這只是一個預見性斷言。另外,前導數字和字母被捕獲到$matches[1]中,並且僅將其寫入$matches[2]

有關PHP的PCRE正則表達式語法的詳細信息,請參閱http://php.net/manual/en/pcre.pattern.php

+0

練習中沒有提及反斜槓。但是你的回答和鏈接非常有幫助。謝謝 – Michiel

2

regular-exressions.info是非常有用的資源。

/'^(d{1,2}([a-z]+))(?:s*)S (?=200[0-9])/

(?:regex)是非捕獲括號;他們是不是在你的例子是非常有用的,但可以用來EXPRES之類的東西(?:bar)+,意味着1個或多個bar小號

(?=regex)做了積極的前瞻,但位置不匹配的內容。因此,在您的示例中,(?=200[0-9])使得正則表達式僅匹配前十年的日期,而不是與年份本身匹配。

+0

優秀的鏈接!謝謝! – Michiel