web-dev-qa-db-fra.com

PHP Utilisation de RegEx pour obtenir la sous-chaîne d'une chaîne

Je cherche un moyen d'analyser une sous-chaîne en utilisant PHP, et j'ai rencontré preg_match mais je n'arrive pas à trouver la règle dont j'ai besoin.

J'analyse une page Web et j'ai besoin de saisir une valeur numérique dans la chaîne, la chaîne est comme ceci

producturl.php?id=736375493?=tm

J'ai besoin de pouvoir obtenir cette partie de la chaîne:

736375493

Merci Aaron

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

Ceci est sûr si le format change. La réponse de slandau ne fonctionnera pas si vous avez déjà d'autres numéros dans l'URL.

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

Malheureusement, vous avez une chaîne de requête d'URL mal formée, donc une technique d'expression régulière est la plus appropriée. Voir ce que je veux dire .

Aucun groupe de capture n'est nécessaire. Faites simplement correspondre id= puis oubliez ces caractères avec \K, puis isolez le ou les caractères numériques suivants.

Code ( Démo )

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

Sortie:

736375493
0
mickmackusa