2011-03-12 88 views
-1

任何人都可以告訴我爲什麼這個簡單的正則表達式失敗?PHP正則表達式幫助需要

$blogurl = 'http://www.sirpi.org/2011/02/23/'; 
if(preg_match("/[0-9]\/[0-9]\/[0-9]\/$/", $blogurl)){ 
    echo "Bad URL\n"; 
} 
+0

如果你解釋了這個代碼被認爲是做什麼的,它可能會有所幫助。事實上,該正則表達式永遠不會匹配該字符串。 – canuckistani 2011-03-12 09:45:28

回答

1

您似乎試圖測試字符串末尾是否有/之間的數字。爲此,您可以使用

$blogurl = 'http://www.sirpi.org/2011/02/23/'; 
if(preg_match("/[0-9]+\/[0-9]+\/[0-9]+\/$/", $blogurl)){ 
    echo "Bad URL\n"; 
} 

+表示一個或多個。否則,你只是匹配一個數字,並且URL中的數字不只是單個數字。

您還可以使用\d的數字,而不是[0-9]

$blogurl = 'http://www.sirpi.org/2011/02/23/'; 
if(preg_match("/\d+\/\d+\/\d+\/$/", $blogurl)){ 
    echo "Bad URL\n"; 
} 
+0

謝謝,上面的代碼使用\ d +就像一個魅力 – 2011-03-12 10:03:01

1

你匹配此:

one of characters 0-9 
a literal slash ("/") 
one of characters 0-9 
a literal slash ("/") 
one of characters 0-9 
a literal slash ("/") 
end of string 

您可能要匹配年中有一個以上的數字,同樣有月和日。

1
/[0-9]\/[0-9]\/[0-9]\/$/ 

正在尋找一個

[0-9] a single digit 
\/ followed by a/
[0-9] a single digit 
\/ followed by a/
[0-9] a single digit 
\/ followed by a/
$  at the end of the string 

嘗試

/[0-9]{1,4}\/[0-9]{1,2}\/[0-9]{1,2}\/$/ 

whic試驗的每個數字/

0

[0-9]之間的號碼相匹配的單個數字。所以這個正則表達式匹配一個數字,一個斜槓,一個數字,一個斜線,一個數字,一個斜槓和一個字符串的結尾。

所以它會匹配4/5/6/,但不匹配11/22/33/

如果你想匹配一個或多個數字,你應該使用[0-9]+。如果您希望匹配零個或多個數字,您還可以使用[0-9]*

0

,因爲你正在尋找個位數。試試這個:

"/[0-9]{4}\/[0-9]{2}\/[0-9]{2}\/$/" 
0

另外,如果你想讓sub url的東西數量變化,

"/(\/[0-9]+)+\/?$/" 

即,至少一個/接着一串數字,然後任選的精加工/

看起來像你的例子中的網址是日期,所以這可能沒有必要。