2008-10-27 7 views
7

J'ai un éditeur wysiwyg dans mon back-end, et il trébuche la première expression régulière que j'ai écrite. C'est en PHP4, en utilisant preg_replace(). Je capture l'URI et le texte lié.expressions régulières - correspond à toutes les ancres avec des attributs optionnels

@<a\shref=\"http[s]?://([^\"]*)\"[]>(.*)<\/a>@siU 

Le client voulait que tous les liens externes pour ouvrir dans une nouvelle fenêtre, de sorte que est l'expression que j'utilisais pour trouver tous (heureusement) des liens externes, mais laisser les liens internes, la page ancre, etc

I réalisé l'éditeur wysiwyg ajoute également style="font-weight: bold" si l'utilisateur sélectionne gras sur le lien. J'ai récemment commencé à apprendre des expressions régulières, donc je ne sais pas comment résoudre ce problème.

Comment le ferais-je?

Répondre

7

il doit correspondre à ce bien:

/<a\s+([^>]*)href="https?:\/\/([^"]*)"(.*?)>(.*?)<\/a>/ 

La chose utile est le match paresseux ici. *? cela veut dire que ça va correspondre autant que nécessaire, contrairement à la correspondance habituelle, qui est gourmande.

Pour démontrer, avec ce texte:

a b c d a b c d

ces regexes auront des résultats différents:

/a.*c/ selects: "a b c d a b c" 
/a.*?c/ selects: "a b c" 
Questions connexes