faire correspondre le modèle d'URL dans PHP en utilisant une expression régulière
Je veux correspondre à un lien url dans un message sur le mur et de remplacer ce lien avec la balise d'ancrage, pour cela, j'utilise l'expression régulière ci-dessous.
Je voudrais le match 4 types d'url:
http://example.com
https://example.com
www.example.com
example.com
preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@',
'<a href="$1">$1</a>', $subject);
Cette expression correspond uniquement aux deux premiers types d'url.
Si j'utilise cette expression pour le match de modèle d'url
'@(www?([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@'
alors il ne correspond au troisième type de modèle d'url.
Comment puis-je correspondre à tous les quatre type de modèle d'url avec une seule expression régulière?
source d'informationauteur Seema
Vous devez vous connecter pour publier un commentaire.
J'avais utiliser un autre regex pour être honnête. Comme celui-Gruber posté en 2009:
ou cette version mise à jour qui Gruber posté en 2010 (merci, @IMSoP):
Un travail complet exemple d'utilisation de Nev Stokes donné lien:
Je regardai autour de moi et ne vois pas qui étaient exactement ce dont j'avais besoin. J'ai trouvé cette une qui était proche, j'ai donc modifié comme suit:
le vérifier sur debuggex.
Je viens de vérifier ce post (après 2 ans) peut-être que vous avez obtenu la réponse, mais pour ceux qui sont débutants, vous pouvez utiliser une expression régulière de la bande de chaque type d'URL ou de Chaîne de Requête
il va de bande de chaque type d'Url, jetez un oeil à la liste ci-dessous. J'ai utilisé différents type de domaines pour ceux qui veulent demander "est-ce strip .nous, .en ou .pk etc type de domaines ou non.
Exemple de travail (testé en PHP5+ Apache2+):
il sera de retour
Espère que cela aide beaucoup de codeurs
Si vous voulez faire ce travail vous avez besoin de faire le "https?//" partie facultative, puisque vous semblez avoir une assez bonne maîtrise des expressions régulières, je ne vais pas vous montrer, un excerise pour le lecteur 🙂
Mais je suis généralement d'accord avec Nev, c'est trop compliqué pour ce qu'il fait.
utiliser ce modèle .
espère que utile .
Mes deux cents (cinq ans plus tard!):
Espère que cela aide quelqu'un