Je pars du principe que la chaîne est générée automatiquement, donc pas de variation de casse, ni d'espaces en moins ou en plus où que ce soit, et "Location: " est systématiquement suivit d'une URL (donc pas besoin de la décrire). Par contre, la séquence de nouvelle ligne est indéterminée (soit CRLF, soit LF, ou autre). Donc:
preg_match_all('~(*ANY) ^ \QLocation: \E \K .+ ~xm', $data, $matches);
ou bien
preg_match_all('~ ^ \QLocation: \E \K .* \S ~xm', $data, $matches);
- (*ANY) : n'importe quelle séquence de nouvelle ligne est possible, donc le . ne pourra pas les matcher
- \Q...\E délimite une chaîne ou les caractères spéciaux sont échappés et notamment les espaces.
- \K définie l'endroit de la correspondance à partir duquel le résultat sera renvoyé.
- \S un caractère qui n'est pas un espace (horizontal ou vertical).
- modificateur m: ^ matche le début de ligne (et $ la fin de ligne).
- modificateur x: les espaces et les commentaires sont ignorés dans la pattern.
Partager