Quelle serait la meilleure expression régulière de ce scénario?
Compte tenu de cette URL: p> Comment dois-je choisir tout entre (mais non compris) < code> http://php.net code> et ceci est pour un NGinx fichier de configuration. p> p> .php code>: p>
11 Réponses :
Essayez ceci:
preg_match("/net(.*)\.php$/","http://php.net/manual/en/function.preg-match.php", $matches);
echo $matches[1];
// prints /manual/en/function.preg-match
Comme ceci: explication: p>
Merci échoué pour l'explication détaillée, qui fonctionne parfaitement
'/ net (. *) \. PHP /' code>, version plus simple, plus petite (et éventuellement meilleure performance) de la même expression. (Je préfère les expressions sans surveillance gustablement inutiles.)
Cette correspondance d'URL générale vous permet de sélectionner des parties d'une URL:
Une expression régulière n'est peut-être pas l'outil le plus efficace pour ce travail.
Essayez d'utiliser Les sorties de code ci-dessus: p> parse_url () < / Code> , combiné avec pathinfo () code> : p>
Merci Phoenix, cela fonctionne aussi, mais je cherchais une solution Reg Ex pour cela.
@silkadmin qui est curieux; Pourquoi la solution doit-elle être une expression régulière?
Désolé, je n'aurais pas dû utiliser la balise PHP qui était confuse, j'avais besoin de la regex pour un fichier de configuration Nginx où votre solution n'est pas une option
Ajá. Merci pour l'info; Je suis allé de l'avant et j'ai mis à jour votre question pour que cela soit plus clair pour les futurs visiteurs.
expression régulière pour tout correspondant à tout ce qui est "net" et avant ".php":
$pattern = "net([a-zA-Z0-9_]*)\.php";
Cela ne correspondra pas à l'exemple donné, car il y a un point dans celui-ci: fonction.cep-match code>
Sans parler de cela ne correspond pas à des barres obliques non plus. En outre, le regex n'est pas ancré - ce qui ne causera probablement pas de problèmes (l'opérateur * code> est gourmand par défaut), mais ce n'est pas une bonne pratique.
Il n'est pas nécessaire d'utiliser une expression régulière pour disséquer une URL. PHP a des fonctions intégrées pour cela, pathinfo () et parse_url () . p>
Voici une solution de regex meilleure que ce que la plupart ont fourni jusqu'à présent, si vous me demandez: http: // regex101. COM / R / NQ8RH5
/http:\/\/[^\/]+\K.*(?=\.[^.]+$)/i
simple: Voir vous-même: http://codepad.viper-7.com/hhmwi2 < / a> p> p> $ correspondance [0] code> est votre URL complète, $ correspondances [1] code> est la partie souhaitée . P>
Juste pour le plaisir, voici deux façons qui n'ont pas été explorées: ou: p> basé sur L'idée que les schémas http pour une solution d'expression régulière pure, vous pouvez casser la chaîne comme ceci: https: // code> sont au plus 8 caractères, il suffit généralement de trouver la première barre oblique à partir de la 9ème position. Si l'extension est toujours .php code> Le premier code fonctionnera, sinon l'autre est requis. P> $parts = pathinfo(parse_url($url, PHP_URL_PATH));
echo $parts['dirname'] . '/' . $parts['filename'];
Voyons, ce qu'il fait: p>
http: [\ /] {2}. +? [.] [^ \ /] + (. +) [.] + code> p>
http: [\ /] {2}. +? [.] [^ \ /] code> - groupe non-capture pour http://php.net code> p>
(. +) [.] code> - Pièce de capture jusqu'à ce que le dernier point se produise: /manual/fr/function.preg-match code> p> p>
[.]. + code> - Extension correspondante du fichier comme ceci: .php code> p> p>
(?: http: [\ /] {2}. +? [.]) [^ \ /] + (. +) [.] +. + code>