web-dev-qa-db-fra.com

Regex: tout attraper jusqu'à un mot spécifique

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

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

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

Cela fonctionne quand il n'y a pas de balises supplémentaires dans l'étiquette <a>, mais quoi il y en a?

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

Le 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
chicken
/<a>(.*?)<\/a>/

devrait marcher. Les ? le rend paresseux, alors il attrape le moins possible avant de faire correspondre le </a> partie. mais en utilisant. va dire que cela correspond à tout jusqu'à ce qu'il trouve </a>. Si vous souhaitez pouvoir correspondre à des lignes, vous pouvez utiliser ce qui suit si avec Preg_Match

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

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

78
Kibbee