5

私はこれに対する解決策を見つけるために何時間も探してきました。REQUEST URI が正当であるかどうかを判断し、そこから分解しようとしています。

$samplerequesturi = "/variable/12345678910";

合法かどうかを判断するために、最初のセクションvariableは文字のみで、長さは可変です。2 番目のセクションは数字で、合計 11 である必要があります。私の問題は、スラッシュをエスケープして、uri で一致させることです。私はもう試した:

preg_match("/^[\/]{1}[a-z][\/]{1}[0-9]{11}+$/", $samplerequesturi)
preg_match("/^[\\/]{1}[a-z][\\/]{1}[0-9]{11}+$/", $samplerequesturi)
preg_match("/^#/#{1}[a-z]#/#{1}[0-9]{11}+$/", $samplerequesturi)
preg_match("/^|/|{1}[a-z]|/|{1}[0-9]{11}+$/", $samplerequesturi)

その他、今となっては思い出せない。

通常、リクエストは次のようにエラーになります。

preg_match(): Unknown modifier '|' 
preg_match(): Unknown modifier '#'
preg_match(): Unknown modifier '['

編集: REQUEST URI は既に知られていると述べるべきだと思います。文字列全体を証明して、偽の文字列ではないことを確認しようとしています。つまり、最初のセットが小文字のみで、2 番目のセットが 11 個の数字のみであることを確認します。

4

3 に答える 3

6

/区切り文字として使用できるのは だけではありません。実際、英数字以外のほとんどすべての文字を使用できます。()個人的には、結果配列の最初の項目が一致全体であり、パターンでエスケープする必要がないことを思い出させるので、使用するのが好きです。

preg_match("(^/([a-z]+)/(\d+)$)i",$samplerequesturi,$out);
var_dump($out);

それはそれを行う必要があります。

于 2012-09-02T20:41:11.863 に答える
2

正規表現を使用したい場合 (この場合は必要ないと思いますが、「/」で分割するだけで問題ありません。

$samplerequesturi = "/variable/12345678910";
preg_match("@^/([A-Za-z]+)/(\d+)$@", $samplerequesturi, $out);
echo $out[1];
echo $out[2];

あなたが行く必要があります

于 2012-09-02T20:25:16.130 に答える
1

問題は/、正規表現の区切り文字としてスラッシュを使用している可能性があります (正規表現の最初と最後で)。#ハッシュ記号や、この特定の式に表示する必要のないその他の記号など、スラッシュ以外の文字の使用に切り替えます。そうすれば、式でスラッシュ文字をまったくエスケープする必要がなくなります。

于 2012-09-02T20:28:24.530 に答える