31 votes

REGEX: tout saisir 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>/

Il fonctionne quand il n'y a pas des balises supplémentaires au sein de l' <a> balise, mais que faire si il y a?

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

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

78voto

Kibbee Points 36474
/<a>(.*?)<\/a>/

devrait fonctionner. L' ? rend paresseux, il saisit aussi peu que possible avant l'appariement de l' </a> partie. mais l'aide . signifie qu'il correspond tout jusqu'à ce qu'il trouve </a>. Si vous voulez être en mesure de correspondre à travers les lignes, vous pouvez utiliser les options suivantes si avec preg_match

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

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

-6voto

ironfroggy Points 3496

N'utilisez pas d'expressions régulières pour analyser le HTML, car elles sont notoirement difficiles à obtenir correctement et le HTML est notoirement peu fiable pour être correctement structuré. C'est encore un endroit où réinventer une autre roue ne vous fait rien économiser. Dans le monde Python, nous suggérons toujours la populaire bibliothèque BeautifulSoup et je suis sûr que votre langue est aussi un bon analyseur super facile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X