1

したがって、文字列が次の形式であるかどうかを確認したいと思います。

チェックアウト/00/支払い

ここで、00は任意の数にすることができます。

preg_matchを使用してこれを実行しようとしましたが、うまくいきませんでした。

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

さらに、文字列に「支払い」という単語の後に文字が含まれている場合は失敗させたい(例:checkout / 00 /payment / more)

4

3 に答える 3

4

以下の次の正規表現は、予想どおりに一致するようになりました。数字を括弧で囲んでいることに注意してください。これにより、$ matchsの数値がキャプチャされるため、後で使用できます。

<?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のマニュアルページ

preg_match_allのマニュアルページ

PCRE正規表現構文のマニュアルページ

正規表現パターンで可能な修飾子

于 2012-11-28T19:45:30.437 に答える
2

[0-9]1桁のみに一致します。正確に2桁の数字を一致させる場合は、:を追加し{2}ます[0-9]{2}

于 2012-11-28T19:45:53.830 に答える
1

正規表現には余分なスペースがあり、[0-9]1桁にしか一致しません。

また、正規表現をで開始および終了する場合、バックスラッシュ()でエスケープしない限り、正規表現内で/使用することはできません。/\/

~代わりにこれを使用しました。

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

これは1つ以上の数字と一致します。

デモ:codepad.viper-7.com/qoKI5G

于 2012-11-28T19:45:52.800 に答える