2008-09-29 8 views
31

ex: <a><strike>example data in here</strike></a>REGEX: Saisissant tout jusqu'à ce qu'un mot spécifique

Je veux que tout à l'intérieur de la balise, à la fin

/<a>([^<]*)<\/a>/ 

Il fonctionne quand il n'y a pas de balises supplémentaires dans la balise <a>, mais Et s'il y en a?

Je veux savoir si vous pouvez lui dire de saisir tout jusqu'à [^</a>] au lieu de [^<] seulement.

Le faire avec /<a>(.*)<\/a>/ ne fonctionne pas bien. Parfois, je reçois tout dans le tag <a> et d'autres fois je reçois des tonnes de lignes incluses dans cet appel.

Répondre

78
/<a>(.*?)<\/a>/ 

devrait fonctionner. Le ? le rend paresseux, donc il saisit aussi peu que possible avant de faire correspondre la partie </a>. mais en utilisant. signifiera qu'il correspond à tout jusqu'à ce qu'il trouve </a>. Si vous voulez être en mesure de faire correspondre à travers les lignes, vous pouvez utiliser ce qui suit si avec preg_match

/<a>(.*?)<\/a>/s 

Le mode « s » à la fin met l'expression régulière dans « une seule ligne », ce qui signifie que. le caractère correspond à tous les caractères, y compris les nouvelles lignes. Voir other useful modifiers

+0

Oui, c'est beaucoup mieux que ma réponse. Cela marche. –

+1

cela fonctionnera jusqu'à ce que vous avez un l'intérieur d'un : et ceci est identique aux célèbres parenthèses correspondant à problème regex. il n'y a pas de solution à ce problème avec regex conventionnel. vous êtes mieux avec une pile ancienne. – wilhelmtell

+7

Dans quelle version foirée de HTML un se produit-il dans un autre tag ? – Kibbee

Questions connexes