2017-04-23 4 views
0

Ceci est la chaîne: <sup>test</sup>
Et le regex J'utilise: (\([\w+\-*\/]+?\)|(?!<)\w+(?<!>))match de l'intérieur Regex balise html (pas capturer, correspondre à peu)

Pourquoi correspond à tous les sup, test et sup?
Je pense que je l'ai utilisé le négatif de < préanalyse et lookbehind négatif de>, donc je pense qu'il ne sera pas attraper sup depuis avant qu'il n'y a « < », et après il est « > »

Qu'est-ce que Je veux juste correspondre à «test», pas correspondre à l'ensemble et de capturer «test».

S'il vous plaît aider

+1

En PHP, ce que vous voulez faire, avec une expression régulière, se fait facilement avec '(* SKIP) (* FAIL)' - '<[^<>] +> (* SKIP) (* F) | \ w + '. En outre, vous semblez avoir échangé un lookahead et lookbehind. –

+1

utilise l'analyseur xml/html – RomanPerekhrest

Répondre

0

contenu En supposant entre > et < Vous pouvez simplement utiliser cette regex: (?<=>)[^<]+

Demo

Explication

[^<]+ Tout caractère sauf un <

(?<=>) Precedeed par un >

Remarque

Si vous ne voulez pas correspondre à la nouvelle ligne ou retour chariot, utilisez celui-ci (?<=>)[^<\r\n]+ à la place. Here est une démo.

Keep it simple;)

0

Vous devez faire correspondre le contenu entre le < +> Contenu

<sup>test</sup>

regex:.? < +> < /.+.? (+.?)? >

en fonction de la précision que vous voulez regarder, vous devez modifier le modèle de recherche, mais cela dépend de votre propre logique