REGEX: saisir tout jusqu'à un mot spécifique

Ex: <a><strike>example data in here</strike></a>

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

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

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

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

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

31
demandé sur Alan Moore 2008-09-29 04:14:39

1 réponses

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

Devrait fonctionner. L' ? le rend paresseux, donc il saisit le moins possible avant de faire correspondre la partie </a>. mais l'aide . signifie qu'il correspond tout jusqu'à ce qu'il trouve </a>. Si vous voulez pouvoir faire correspondre les lignes, vous pouvez utiliser ce qui suit avec preg_match

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

Le " s " à la fin met l'expression régulière en mode "ligne unique", ce qui signifie la . caractère correspond à tous les caractères, y compris les nouvelles lignes. Voir autres modificateurs

78
répondu Kibbee 2012-03-15 02:11:42