web-dev-qa-db-ja.com

PHP RegExを使用して文字列の部分文字列を取得する

私はPHPを使用して部分文字列を解析する方法を探していますが、preg_matchに遭遇しましたが、必要なルールを解決できないようです。

Webページを解析していますが、文字列から数値を取得する必要があります。文字列は次のようになります

producturl.php?id=736375493?=tm

文字列のこの部分を取得できる必要があります。

736375493

ありがとうアーロン

50
MonkeyBlue
$matches = array();
preg_match('/id=([0-9]+)\?/', $url, $matches);

これは、形式が変更された場合に安全です。 URLに他の数字がある場合、slandauの答えは機能しません。

php.net/preg-match

68
David Fells
<?php
$string = "producturl.php?id=736375493?=tm";
preg_match('~id=(\d+)~', $string, $m );
var_dump($m[1]); // $m[1] is your string
?>
18
anubhava
$string = "producturl.php?id=736375493?=tm";
$number = preg_replace("/[^0-9]/", '', $string);
6
slandau

残念ながら、不正な形式のURLクエリ文字列があるため、正規表現の手法が最も適切です。 つまり を参照してください。

キャプチャグループは必要ありません。 id=と一致し、\Kでそれらの文字を忘れてから、次の1つ以上のデジタル文字を分離します。

コード( デモ

$str = 'producturl.php?id=736375493?=tm';
echo preg_match('~id=\K\d+~', $str, $out) ? $out[0] : 'no match';

出力:

736375493
0
mickmackusa