Essayez de ne pas trop accroché sur une fonction spécifique comme preg_match()
. PHP propose plusieurs façons de générer votre sortie souhaitée. Je vais vous montrer trois approches différentes:
entrée:
$response="Response: 311768560
311768562
311768564";
Méthode n ° 1: explode()
avec substr()
et strpos()
(Demo)
$array=explode("\r\n",substr($response,strpos($response,' ')+1));
* Note, cette méthode suppose que la première chaîne (Response
) est la seule sous-chaîne indésirable et qu'elle est toujours s d'abord. En outre, le \r
peut ne pas être nécessaire en fonction de votre environnement de codage. C'est probablement le plus rapide de ma liste de méthodes car il n'utilise pas regex, mais il nécessite 3 appels de fonction et une incrémentation - sans parler du fait qu'il peut être trop littéral pour votre cas d'utilisation réel.
Méthode 2: preg_match_all()
(Demo)
$array=preg_match_all('/\d+/',$response,$out)?$out[0]:[];
Cette méthode est très directe, rapide et nécessite un minimum de code. S'il y a des inconvénients, preg_match_all()
renvoie un résultat true | false et génère une variable de sortie sous la forme d'un tableau multidimensionnel. Pour modifier cette sortie en fonction de votre exigence unidimensionnelle, je place une condition en ligne à la fin de la fonction qui fournit les données souhaitées à $array
.
Méthode n ° 3: preg_split()
(Demo)
$array=preg_split('/[^\d]+/',$response,null,PREG_SPLIT_NO_EMPTY);
Cette fonction se comporte comme explode()
sauf qu'il brandit la puissance de regex. Le motif identifie toutes les sous-chaînes non numériques et les utilise comme "délimiteurs" et sépare la chaîne sur chacune d'elles.Pour votre saisie, le premier délimiteur est "Réponse:", puis le ou les caractères de nouvelle ligne après: "311768560" et "311768562". La beauté de preg_split()
est qu'il fournit directement le tableau à une dimension que vous recherchez.
Sortie:
Peu importe laquelle des méthodes ci-dessus vous essayez, vous recevrez la même sortie correcte: $array=array('311768560','311768562','311768564');
Si l'une de ces méthodes échouent votre cas réel d'utilisation, il est probablement le produit de votre chaîne $response
étant trop différent des exemples de données que vous avez publiés ici.
comme vous voulez seulement par preg_match alors faites le moi savoir, est-il fixé qu'il y aura 3 numéros? –