2012-11-28 71 views
1

所以我想檢查一個字符串的格式爲查詢網址:使用的preg_match與「通配符」

結賬/ 00 /支付

其中00可以是任何數字。

我試着使用的preg_match要做到這一點,但它沒有工作:

if(preg_match('/checkout/ [0-9] /payment/', $url, $matches)){ 
     echo 'hello'; 
} 

而且我想如果字符串字「支付」 如結帳/ 00之後的任何字符它失敗/ payment/more

回答

4

下面的正則表達式現在可以像您期望的那樣匹配。請注意,我用括號包圍了數字。這會捕獲$匹配中的數字,以便稍後使用它。

<?php 
header('Content-Type: text/plain'); 

foreach(array(0,5,10,99) as $i) 
{ 
    $num = str_pad($i, 2, '0', STR_PAD_LEFT); 
    $url = 'checkout/'.$num.'/payment'; 

    if(preg_match('/checkout\/([0-9]+)\/payment/i', $url, $matches)) 
    { 
     echo 'url: "'.$url."\"\n"; 
     echo 'hello: '.$matches[1]."\n"; 
     print_r($matches); 
    } 

    echo "\n\n"; 
} 
?> 

此代碼產生以下輸出:

url: "checkout/00/payment" 
hello: 00 
Array 
(
    [0] => checkout/00/payment 
    [1] => 00 
) 


url: "checkout/05/payment" 
hello: 05 
Array 
(
    [0] => checkout/05/payment 
    [1] => 05 
) 


url: "checkout/10/payment" 
hello: 10 
Array 
(
    [0] => checkout/10/payment 
    [1] => 10 
) 


url: "checkout/99/payment" 
hello: 99 
Array 
(
    [0] => checkout/99/payment 
    [1] => 99 
) 

preg_match manual page

preg_match_all manual page

PCRE regex syntax manual page

Possible modifiers in regex patterns

1

你的正則表達式裏有多餘的空格,而[0-9]只會匹配一個數字。

此外,如果您使用/開始並結束您的正則表達式,則不能在其中使用/,除非您使用反斜槓(\/)轉義它。

我用~代替這個。

if(preg_match('~checkout/([0-9]+)/payment$~', $url, $matches)) { 
    echo 'Matched! (' . $matches[1] . ')'; 
} 

這將匹配一個或多個數字。

演示:只有codepad.viper-7.com/qoKI5G

2

[0-9]匹配單個數字。如果您想匹配兩位數字,請附加{2}[0-9]{2}