1

/(私はあなたが使用していると思います)の最後のインスタンスと一致[^/]+$させ、ダッシュに到達するまで次の4つ以下の数字の内容をコピーしたいと思います-

この数値を返す「正しい」方法はpreg_splitを使用することだと思いますが、よくわかりません。私が知っている他の唯一の方法は、で爆発し/、配列を逆にし、で爆発し-、割り当てることです。もっとエレガントな方法があると思いますか?

例えば

example.com/12-something // get 12

example.com/996-something // get 996

example.com/12345-no-deal // return nothing 

残念ながら、私はあなた方の何人かのような正規表現の第一人者ではありません。

これは同じことをするための醜い方法です。

$strip = array_reverse(explode('/', $page));

$strip = $strip[0];

$strip = explode('-', $strip);

$strip = $strip[0];

echo (strlen($strip) < 4) ? (int)$strip : null; 
4

2 に答える 2

1

一致する/\/(\d{1,4})-[^\/]+$/場合は、最初のキャプチャ変数の番号に一致する必要があります。申し訳ありませんが、PHPを作成しておらず、のインターフェイスを扱いたくないのですpreg_matchが、それはとにかく正規表現です。

PHPが最近、スラッシュ以外の正規表現区切り文字をサポートしている場合m#/(\d{1,4})-[^/]+$#は、傾いた楊が少ないバージョンです。

于 2011-08-12T19:08:49.263 に答える
1

これはうまくいくはずです

    $str = "example.com/123-test";
    preg_match("/\/([\d]{1,4})-[^\/]+$/", $str, $matches);
    echo $matches[1]; // 123

###-wordパーツが最後にあり、1〜4桁しかないことを確認します。

于 2011-08-12T19:11:16.307 に答える