2011-11-08 4 views
1

Mon modèle actuel regex:REGEX pour correspondre uniquement l'ensemble contenant une chaîne spécifique

(?s)]*>(.*?)\bsomethin\b(.*?)

fragment HTML pour la recherche:

<p>somethin</p> 
<p>nuthin</p> 

Si je le lance contre le fragment HTML ci-dessus, il correspondra <p>somethin</p> c'est ce dont j'ai besoin.

Cependant, si je change la chaîne incorporée de modèle de "quelque chose" à "nuthin", elle correspondra aux deux balises p dans leur intégralité quand je veux seulement la deuxième balise. Le comportement est le même si j'imprime les p tags plutôt que de les avoir sur une seule ligne et cela est également souhaité.

Merci.

+0

Je ne comprends pas ce que vous voulez ... Qu'est-ce que vous voulez dire avec "quand je veux seulement le deuxième ensemble de balises"? Mieux vaut également utiliser des bibliothèques spécifiques pour manipuler le HTML, n'utilisez pas d'expressions rationnelles. – m0skit0

+1

N'utilisez pas regex avec HTML! – hsz

+0

Bienvenue à pourquoi ne pas analyser html avec le tutoriel regex. Si vos compétences sont assez élevées, vous devriez écrire un analyseur html avec regex vous-même - à partir de zéro. Si ce n'est pas le cas, je suggérerais * que vous utilisiez l'utilitaire que votre plate-forme fournit pour gérer le HTML. – FailedDev

Répondre

1

L'expression est assez étrange et je ne comprends pas exactement ce que vous voulez. Mais si vous souhaitez prendre chaque tag, essayez la prochaine regex:

(?s)<(.+?)>\b\w+\b</\1> 

Précisez votre question, plz.

+0

La question est trop générale. Pas de langue, pas de détails. J'ai écrit regex pour l'exemple de l'auteur. De plus, rien ne dit que nous pourrions utiliser regex ou adopter une autre approche. – Zernike

+0

Mon environnement cible est trouvé ou trouvé par regex dans les fichiers de l'IDE IntelliJ. Le motif suggéré ne correspond à rien dans mon fragment de code. – bchesley

0

Voici ce que je vous recommande:

(<([^>\s]*)[^>]*>[*<]*somethin[*<]*</\2>) 

Cela ne fonctionnera pas s'il y a des balises HTML imbriquées à l'intérieur de votre élément parent, mais sinon, vous devriez être en or.

+0

Aucune correspondance sur les étiquettes à une ligne ou à plusieurs lignes? – bchesley

0

Si vous souhaitez sélectionner des balises uniquement avec l'utilisation de chaîne exacte this: <(\w+).*?>(somethin)<\/\1>

Si vous souhaitez sélectionner une utilisation sous-chaîne containig tag this: <(\w+).*?>.*?(somethin).*?<\/\1>

Questions connexes