3

次のようなURIのリストから整数を解析しようとしています:

uri.com/upload/123456789_abc.ext

私はこのパターンを使用しています:

preg_match( "#uri\.com\/upload\/(.*?)_#is", $uri, $match );

どちらが機能して戻りますか:

Array
(
    [0] => uri.com/upload/123456789_
    [1] => 123456789
)

しかし、複数の値を持つ配列を返す代わりに $match == "123456789" を作成する方法があるかどうか疑問に思っていました。

パターンを変更するだけで可能ですか?

4

2 に答える 2

6

常に配列を返しますが、必要なものだけに一致するようにパターンを変更できます。

$uri = "uri.com/upload/123456789_abc.ext";
preg_match('#(?<=uri\.com/upload/)\d+#is', $uri, $match );
print_r($match);

戻り値

配列([0] => 123456789)

したがって、それはまだ配列ですが、一致するもの全体、つまりあなたの番号のみが含まれています。

(?<=uri\\.com/upload/)は後読みであり、その部分と一致しないため、結果の一部ではありません。

\d+は一致する数字のみであるため、_はもう必要ありません。

于 2012-05-06T20:20:11.413 に答える
0

php にはありません。一方、perl では、最後に一致した正規表現を参照する $1、$2 などの自動変数があります。つまり、あなたの例では、一致を実行した後、 $1 変数は整数を保持します。

したがって、アイデアは一般的に大丈夫です。あなたはperlを気に入るはずです.. :-)

于 2012-05-06T18:02:36.040 に答える