Thread RegEx: großes, umfangreiches Problem (18 answers)
Opened by pktm at 2003-08-17 18:54

pktm
 2003-08-17 18:54
#65078 #65078
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!
Vielleicht erinnert sich wer ausm alten Forum an dieses Problem :)
Also ich habe mir eine FAQ angelegt.
Diese besteht aus lauter htmls. An diesem System will ich auch vorerst nichts ändern, auch wenn jemand mir eine noch so gute Lösung anbietet - sorry.
Also diese htmls haben folgenden Aufbau:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
<h1>Titel der Seite, z.B. Arrays</h1>
<li>toc, alle Beiträge sind am anfang der Seite aufgelistet
<li><a href="#irgendwas">da können auch tags zwischen li und toceintrag stehen
<hr /> #exakt so, nicht anders. <hr> wird nicht gematcht, <hr id="irgendeineID" /> auch nicht.
<h2>toc, alle Beiträge sind am anfang der Seite aufgelistet</h2>
hier steht der Beitrag, die Überschrift entspricht exakt dem, was im toc steht, hier darf kein <h2> oder <hr /> verwendet werden
<hr /> #trennzeichen
<a name="irgendwas">& </a>
<h2>da können auch tags zwischen li und toceintrag stehen</h2>
beitrag
<hr />

So, jetzt würde ich gerne, nachdem der Artikel bearbeitet wurde mit Hilfe des untenstehenden COdes prüfen, ob der User a) ein <hr /> in seinem beitrag sehen hat und b) überhaupt eines drinne ist (wenn nich -> anfügen) und wenn, ob es am Ende steht, also da wo es sein soll.
Bei mir passiert bis jetzt folgendes:
1. es kommt keine Feghlerausgabe
2. es wird irgendwie immer ein <hr /> angefügt, auch wenn 2 oder mehr am Ende stehen
Fazit: die RegEx findet das <hr /> garnicht.
Ich komme hier nicht weiter.
Hilfe!
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
            $subs{hint} .= qq~<p>PID: $query->{pid}</p>~;
# ---- alt
#        # validate ob keine <h2> und keine <hr />
#            if( $query->{beitrag_neu} =~ m|<hr />{2+}|i
#             or $query->{beitrag} =~ m|<hr />{2+}|i ){
#                $subs{error} .= qq~<p class="error">Beitrag darf kein &lt;hr /&gt enthalten!</p>~;
#            }
#        #ein <hr /> am Ende => wenn nicht, anhängen!
#            chomp( $query->{beitrag} );
#            if( $query->{beitrag} =~ m|<hr/>$|i ){
#                $subs{hint} .= qq~<p class=hint>hr am Ende enthalten!</p>~;
#            }else{
#                $query->{beitrag_neu} .= qq~<hr />~;
#            }
       # validate ob keine <h2> und keine <hr/>
           if( $query->{beitrag_neu} =~ m|(?:<hr />){2,}|i){
               $subs{error} .= qq~<p class="error">Beitrag darf kein &lt;hr /&gt enthalten!</p>~;
           }
       #ein <hr /> am Ende => wenn nicht, anhängen!
           chomp( $query->{beitrag} );
           if( $query->{beitrag} =~ m|<hr />$|i ){
               $subs{hint} .= qq~<p class=hint>hr am Ende enthalten!</p>~;
           }else{
               $query->{beitrag_neu} .= qq~<hr />~;
           }




           # validate auf andere verbotne Tags
           if( $query->{beitrag} =~ /<h2>/ ){
               $subs{error} .= qq~<p class="error">Beitrag darf kein &lt;h2&gt enthalten!</p>~;
           }
# ---- Fehlerbehandlung
           if( exists $subs{error} ){
               print "Fehler!\n";
               print substitute( extractFile( $tmplDir . '/artikel_edit_edit.html' ) );
           }else{
               print "weiter<p />$query->{topic_neu}\n";
               print qq~<table border="2"><tr><td>$query->{beitrag_neu}</td></tr></table>~;
               
# ---- toc editieren
           my @file = extractFile( $query->{file} );
           my %toc = ();
           my @toc = ();
           foreach ( 0..$#file ) {
               if( $file[$_] =~ m/<h2>/ig ) {
                   last;
               }else{
                   if( $file[$_] =~ m/<li>/i ) {
                       push @toc, $file[$_];
                       $toc{$file[$_]} = $_;
                   }
               }
           }
           
           # -> toc_alt löschen
           # -> toc_neu einfügen (=> insert-after) => Aufgabe von "Sortieren"
           my $tocZeile = undef; #Zeile in der Datei, in der der TOC-Eintrag gespeichert ist
           foreach( keys %toc ) {
               if( $_ =~ m/$toc[$query->{tocNr}]/ ) {
                   $tocZeile = $toc{$_};
               }
           }

           # $file[$tocZeile] = $query->{newTopic};
#            if( $zeile =~ m/<li>(<[^>]+>)*(.*)(<[^>]+>?)*/ig ){
#                # $2 = $query->{topic}
#            }
           # file auslesen
           # -> beitrag alt löschen
           # -> beitrag_neu einfügen
           # Meldung ausgeben
           }
           #beitrag speichern
           #open(DAT, ">$query->{file}" ) || die "$! ($query->{file})";
           #print DAT @inhalt;
           #close(DAT);


Wäre für verbesserungsvorschläge (an meinem Code!) auch dankbar.
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )

View full thread RegEx: großes, umfangreiches Problem