0

最初に、私は Reg-Ex をあまり理解していないので、誰かが私を助けてくれることを願っています。

「/1/3」または「/1/34/2/6」などの文字列があり、最終番号の後に最後の番号を取得しようとしています/

友人がこの式を送ってくれましたが、最後の /

preg_replace('~^/([0-9]+)(/.*)?$~', '$1', $cat['path']);

$cat[path] は、取得した文字列です。スラッシュではなく最終的な番号を取得するには、これをどのように変更すればよい/ですか?

4

4 に答える 4

4

正規表現を使用せずにこれを解決します。

$parts = explode('/', $input);
$latest_one = array_pop($parts);
于 2012-08-20T19:49:10.540 に答える
3

$cat['path']ファイルシステムまたは URL パスですか? PHP には、それらを処理するための関数が既に用意されています。

$cat['path'] = '/1/34/2/6';
var_dump(
    basename($cat['path']),
    pathinfo($cat['path'], PATHINFO_BASENAME)
);

お役立ち情報

于 2012-08-20T19:59:04.260 に答える
3

あなたがしたい:

#/(\d+)$#

# は区切り文字です。その意味は、

/      a slash,
\d+    a sequence of one or more digits,
$      then the end.

括弧は、シーケンスをキャプチャすることを意味します。

PHP コードは次のようになります。

$string = "1/12/26";

if (preg_match('#/(\d+)$#', $string, $results))
{
    $number = $results[1]; // [0] holds the whole string
    print "The last number is $number.";
}
于 2012-08-20T19:48:19.260 に答える
-1
preg_match('{/(\d)[^\d]*$}', $string, $matches);
$matches[0]; // this should be your number
  • {and}は区切り文字です - 通常の区切り文字は/and/または@and@ですが、必要に応じて、できるだけ少ない文字をエスケープできる区切り文字を選択します。
  • /1 つのスラッシュに一致/します。区切り文字を使用した場合、このスラッシュをバックスラッシュでエスケープする必要がありました。
  • \d1 桁の数字に一致 - \d* は数字を含まない任意の桁数に一致し、\d+ は任意の桁数に一致しますが、少なくとも 1 桁の数字に一致します。
  • [^\d]*数字以外のすべてに一致します。文字列の末尾の前の最後の文字が数字以外のものではないことが確実な場合、これはオプションになる可能性があります。
  • $文字列の末尾に一致します。これにより、文字列の末尾に向かっていることが保証されます。

/区切り文字を使用した同等の例:

preg_match('/\/(\d)[^\d]*$/', $string, $matches);
于 2012-08-20T19:48:53.493 に答える