Php 使用preg_match检查带有“的URL”;通配符;

Php 使用preg_match检查带有“的URL”;通配符;,php,preg-match,Php,Preg Match,因此,我想检查字符串的格式是否为: 结帐/00/付款 其中00可以是任何数字 我尝试使用preg_match来完成此操作,但没有成功: if(preg_match('/checkout/ [0-9] /payment/', $url, $matches)){ echo 'hello'; } 此外,如果字符串在单词“payment”后有任何字符,我希望它失败 e、 g checkout/00/payment/more下面的正则表达式现在与您预期的匹配。请注意,我用括号括住了

因此,我想检查字符串的格式是否为:

结帐/00/付款

其中00可以是任何数字

我尝试使用preg_match来完成此操作,但没有成功:

if(preg_match('/checkout/ [0-9] /payment/', $url, $matches)){
         echo 'hello';  
}
此外,如果字符串在单词“payment”后有任何字符,我希望它失败
e、 g checkout/00/payment/more

下面的正则表达式现在与您预期的匹配。请注意,我用括号括住了数字。这将捕获$matches中的数字,以便稍后使用

<?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";
}
?>


下面的正则表达式现在与您预期的匹配。请注意,我用括号括住了数字。这将捕获$matches中的数字,以便稍后使用

<?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";
}
?>


您的正则表达式中有额外的空格,
[0-9]
将只匹配一个数字

此外,如果以
/
开头和结尾正则表达式,则不能在其内部使用
/
,除非使用反斜杠(
\/
)对其进行转义

我用了
~
来代替这个

if(preg_match('~checkout/([0-9]+)/payment$~', $url, $matches)) {
    echo 'Matched! (' . $matches[1] . ')';
}
这将匹配一个或多个数字


演示:

您的正则表达式中有额外的空格,
[0-9]
将只匹配一个数字

此外,如果以
/
开头和结尾正则表达式,则不能在其内部使用
/
,除非使用反斜杠(
\/
)对其进行转义

我用了
~
来代替这个

if(preg_match('~checkout/([0-9]+)/payment$~', $url, $matches)) {
    echo 'Matched! (' . $matches[1] . ')';
}
这将匹配一个或多个数字


演示:

[0-9]
只匹配一位数字。如果要精确匹配两位数字,请附加
{2}
[0-9]{2}
[0-9]
仅匹配一位数字。如果要精确匹配两位数字,请附加
{2}
[0-9]{2}