0

私は次のようないくつかのURLを持っています:

dir-1
dir-1/dir-2
dir-1/dir-2/dir-3
dir-1/dir-2/dir-3/dir-[n]..and so on..

私の現在の正規表現(PHPを使用)は次のようになります。

/^([[:lower:][:digit:]\-\/]+)$/

したがって、正規表現はすべてのURLと一致します。しかし、私の場合、必要なのは1番目と2番目のバージョンだけなので、スラッシュはNONEまたは1回だけ発生します。

私は正しい方法を見つけるために何度も試みましたが、結果はありませんでした。

4

2 に答える 2

2

その文字のセット(マイナスa /)、次にオプション/、そしてその文字のセットをもう一度(オプションで)一致させます。

/^([[:lower:][:digit:]-]+\/?[[:lower:][:digit:]-]*)$/
于 2012-03-06T20:02:24.780 に答える
2

区切り文字としてスラッシュを使用して文字列を分解することができます-

$str = "dir-1/dir-2";    
$splitArr = explode('/',$str);
  • 結果の配列に複数の要素がある場合は、スラッシュが存在します。
  • 2つ以上の要素==1つ以上のスラッシュ!
array (
  0 => 'dir-1',
  1 => 'dir-2',
)  

あなたの質問はあなたが特にURLを買う古い文字列変数について話していないと述べているので、文字列の最初からhttpまたはhttpsプロトコルを削除することを忘れないでください:

例えば: https://marvin.com/dir-1/dir-2

変数を使用できる可能性があります。$_SERVER[REQUEST_URI]これにより、サイトに関連する現在のURLが返されますDOCUMENT ROOT

したがって、$_SERVER[REQUEST_URI]https://marvin.com/dir-1/dir-2は:

/dir-1/dir-2 (見覚えがあります?)

その後、最初のルートスラッシュとHEY PRESTOexplode()を削除するために使用することもできます!正規表現の使用を避けました!array_shift()

問題に直面したときに、「わかっている、正規表現を使用する」と考える人もいます。今、彼らは2つの問題を抱えています。

于 2012-03-06T20:22:09.400 に答える