Schrift
[thread]12871[/thread]

RegEx-Problem mit XML-Tags

Tags: Ähnliche Threads

Leser: 3


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Pida
 2008-12-07 13:20
#116902 #116902
User since
2006-06-09
52 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

ich habe hier folgenden RegEx (incl. begrenzender Anführungszeichen:
Code: (dl )
"</?(?!div).*?>"

Mein Problem:
Er matcht auf folgenden Tag, obwohl ich das meine ausgeschlossen zu haben:
Code: (dl )
</div>

Das Problem muss am Slash liegen, denn öffnende Tags wie dieser werden nicht gematcht:
Code: (dl )
<div attr="wert"

Was mache ich falsch?

Danke
Pida
renee
 2008-12-07 13:32
#116904 #116904
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Warum verwendest Du keinen richtigen XML-Parser? Das würde etliche Probleme verhindern.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Pida
 2008-12-07 13:50
#116905 #116905
User since
2006-06-09
52 Artikel
BenutzerIn
[default_avatar]
Leider habe ich kein XML, sondern SGML mit seltsamen Entities und die DTD dazu ist auch nicht mehr verfügbar. Das Problem ergibt sich bei dem Versuch, die für mich relevanten Inhalte in XML zu überführen.

Gruß
Pida
Gast Gast
 2008-12-07 15:02
#116908 #116908
Code: (dl )
</?(?!div).*?>

Das besagt:
"<" dann ein "/" oder keines darauf soll nicht "div" folgen und dann irgendwas, aber möglichst wenig davon, gefolgt von ">"
ich denke du willst sowas:
Code: (dl )
<\s*div\s*(?:\w+=(?:"[^"]+"|'[^']+'|[^\s]+)\s*)*?>


Das matched auf:
<div>
<div bla="irgendwas">
<div bla='irgendwas'>
<div bla=irgendwas>
<div bla="irgendwas" bla="irgendwas">
<div bla='irgendwas' bla="irgendwas">
<div bla=irgendwas bla=irgendwas>
usw usf...
Pida
 2008-12-07 15:49
#116911 #116911
User since
2006-06-09
52 Artikel
BenutzerIn
[default_avatar]
Hallo Gast;

Nein, genau das will ich nicht.

Meinen RegEx beschreibst du so (und ich denke eben auch, das dem so ist):
"<" dann ein "/" oder keines darauf soll nicht "div" folgen und dann irgendwas, aber möglichst wenig davon, gefolgt von ">"

Mein Problem ist, dass er dennoch auf </div> matcht; also scheint ein Fehler drin zu sein.

Gruß
Pida
Gast Gast
 2008-12-07 15:59
#116912 #116912
Achso, du willst alle nicht "divs" haben. ich dachte s währe klar, dass in ".*?" noch ein "div" drin stecken kann z.B nach einem "\s"
was du suchst ist also:
Code: (dl )
</?(?!div|>)+>
Pida
 2008-12-07 16:13
#116914 #116914
User since
2006-06-09
52 Artikel
BenutzerIn
[default_avatar]
Leider war auch das kein Treffer. Dieser RegEx matcht z.B. <l> nicht.

Ich suche einen RegEx, der alle Tags mit Ausnahme der div-Tags matcht.

Es sollen beispielsweise gematcht werden:
Code: (dl )
1
2
3
4
<l>
<l n="5>
</l>
<milestone attribut="wert">


Es sollen z.B. nicht gematcht werden:
Code: (dl )
1
2
<div attibut="wert">
</div>


Mein Ausgangs-RegEx erfüllt das mit folgender Ausnahme: Er matcht auf </div>.

Gruß
Pida
Gast Gast
 2008-12-07 16:33
#116916 #116916
versuch mal das:
Code: (dl )
<(?:/(?!div)[^>]+|(?!div)[^>]+)>
Pida
 2008-12-07 16:54
#116917 #116917
User since
2006-06-09
52 Artikel
BenutzerIn
[default_avatar]
Das Resultst ist das gleiche...

Derart sieht übrigens meine Ausgangsdatei aus:

Code: (dl )
<div n="1" type="Book"><l>text text</l><l>text text</l></div><div>...</div> // und so weiter
Gast Gast
 2008-12-07 17:15
#116919 #116919
jetzt aber:
Code: (dl )
<(?!/?div)[^>]+>
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2008-12-07 13:20.