2017-07-08 2 views
-1

Ich versuche, reguläre Ausdrücke zu verstehen:Regex Voll Spiel

Ich brauche nur auf text_01 und die Tags text_02 und ausfiltern entsprechen.

<span>text_01<b>text_02</b> 

Ich habe versucht, es zu tun:

(?<=<span>)(([^>]+)<b>)(.+?)(?=</b>) 

Aber es fängt drei Gruppen und und das Voll Spiel enthält einen Tag.

text_01<b>text_02 

Können Sie mir geben Ratschläge, wie ich brauche einen regulären Ausdruck, dessen Voll Spiel enthält nur Text und keine Tags zu bauen?

Antwort

0

Parsing HTML mit regulären Ausdrücken kann sehr kompliziert werden. Im Allgemeinen ist es not advised practice und besser, einen Parser dafür zu verwenden (irgendeine Bibliothek in welcher Sprache auch immer du verwendest).

Aber für Fälle, in denen Sie sicher sind, der Textinhalt nicht < noch > hat, und diese < und > nicht verschachtelt sind, können Sie dieses verwenden:

[^<>]*(?=<[^<>]*>)

Dieser nur Text übereinstimmt, wird gefolgt von einem Paar < und >.

Wenn es genug ist, dass der Text zu testen, wird von < gefolgt, kann es einfach sein:

[^<>]*(?=<)

+0

Danke. Das ist genau das, was ich brauche. Du bist toll. – recont

0

Wenn Sie eine nicht erfassende Gruppe verwenden, können Sie das mittlere <b>-Tag als Erfassungsgruppe ausschließen, aber Sie werden niemals eine vollständige Übereinstimmung ohne das Tag erhalten können. Es ist nicht möglich, ein regulärer Ausdruck kann einen Teil während der Aufnahme nicht überspringen. Ein Match muss aufeinander folgen.

(?<=<span>)(.+?)(?:<b>)(.+?)(?=<\/b>) 
  • Voll Spiel text_01<b>text_02
  • Gruppe 1. text_01
  • Gruppe 2. text_02