Zeichenkette in Zeichenkette mit eregi(); finden

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zeichenkette in Zeichenkette mit eregi(); finden

    Ich such eine Zeichenkette, von der ich genau weiß, dass vor und hinter ihr 2 ganz bestimmte Zeichenketten stehen, ich habe bisher folgendes versucht:

    PHP-Code:
    $php eregi("(\<font size\=\"2\" color\=\"aqua\"\>PHP\:\<\/font\>\<hr align\=\"center\"\>\<font face\=\"arial\"\>)(^|.*|$)(\<\/font\>\<hr align\=\"center\"\>)"$datensatz[beitrag], $array); 
    Soll beliebige Zeichenkette finden vor der die Zeichenkette "<font size="2" color="aqua">PHP:</font><hr align="center><font face="arial">" kommt
    und nach der die Zeichenkette "</font><hr align="center">" kommt. In meinem Buch (aus dem ich lerne *g*) steht, dass ^| dafür steht was vor einer Zeichenkette steht und |$ was danach steht oder so ähnlich. Ziel des ganzen ist, die Zeichen zu erfassen (bzw. der Variable $php als Wert zuzuweisen) die zwischen den o.g. vorangehenden bzw. nachfolgenden Zeichketten steht.

  • #2
    eine beliebige zeichenkette erkennt man so: (.*?) den rest hab ich nicht kontrolliert
    h.a.n.d.
    Schmalle

    http://impressed.by
    http://blog.schmalenberger.it



    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
    ... nur ohne :-)

    Kommentar


    • #3
      Re: Zeichenkette in Zeichenkette mit eregi(); finden

      In meinem Buch (aus dem ich lerne *g*) steht, dass ^| dafür steht was vor einer Zeichenkette steht und |$ was danach steht oder so ähnlich.
      na dann schmeiss das buch mal schleunigst weg :-)

      ^abc(.*)xyz$ heisst, dass die zeichenkette mit abc anfangen muss und mit xyz aufhören muss.

      ^und $ stehen für den anfang bzw. das ende der zeichenkette.

      wenn du also einen string suchst, der auch irgendwo mitten im suchstring vorkommen darf, dann darfst du ^und $ nicht einsetzen.

      tipp: schau dir mal hier auf der seite das tutorial an, dass verschafft einen recht guten einstieg in die thematik der regülären ausdrücke.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Okay, ich hab den ^ Operator aber schon in andrer Bedeutung gesehen, nähmlich, dass etwas NICHT vor einer Zeichenkette stehen darf. Aber bisher nur in Verbindung mit Zeichenklassen [^A-Z0-9], wie bekomme ich das mit Zeichenketten hin. Nehmen wir mal an hinter Zeichenkette abc darf NICHT def stehen?

        Kommentar


        • #5
          Okay, ich hab den ^ Operator aber schon in andrer Bedeutung gesehen, nähmlich, dass etwas NICHT vor einer Zeichenkette stehen darf.
          ja stimmt, dass hatte ich jetzt nicht erwähnt.

          Aber bisher nur in Verbindung mit Zeichenklassen [^A-Z0-9], wie bekomme ich das mit Zeichenketten hin. Nehmen wir mal an hinter Zeichenkette abc darf NICHT def stehen?
          wie schon gesagt, wenn du hier ins tutorial kuckst, da findest du sogar für diesen fall ein beispiel ;-)
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Da steht irgendwas mit ! was nirgends erklärt wird, außerdem arbeite ich mit ereg_replace, wärst du nicht einfach so freundlich und würdest mir es sagen?

            Kommentar


            • #7
              Nehmen wir mal an hinter Zeichenkette abc darf NICHT def stehen?
              na schön, man ist ja tierfreund ;-)

              also, laut dem beispiel in diesem tut müsste das dann so aussehen:

              /abc(?!def)/

              -> trifft auf eine string zu, der irgendwo abc enthält, aber nur, wenn danach kein def folgt.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                grml, hilft irgendwie auch nicht. Problem ist eigentlich ganz einfach:
                Ich will PHP Code in einem Beitrag besonders kennzeichnen (ähnlich wie hier im Forum), dazu benutze ich beim Schreiben die Tags [php2] und [/php2] welche den PHP Code eingrenzen, der reguläre Ausdruck sieht dazu so aus.
                PHP-Code:
                $beitrag eregi_replace("(\[php\])(.*)(\[\/php\])""<font size=\"2\" color=\"aqua\">PHP:</font><hr align=\"center\"><font face=\"arial\">\\2</font><hr align=\"center\">"$beitrag); 
                Wenn ich jetzt im Beitrag aber den PHP Tag 2 oder mehrmals stehen hab, sieht das Ergebnis so aus:

                <font size="2" color="aqua">PHP:</font><hr align="center"><font face="arial">Code[/php][php]Code</font><hr align="center">

                anstatt so:

                <font size="2" color="aqua">PHP:</font><hr align="center"><font face="aria\">Code</font><hr align="center">
                <font size="2" color="aqua">PHP:</font><hr align="center"><font face="aria\">code</font><hr align="center">



                Irgendwo verhaspelt der sich wenn ich so einen Beitrag schreibe [php]Code[/php2][php2]code[/php2]". Ich dachte nun, dass er den HTML Code bis zum Rückbezug (\\2) mitinterpretiert und dann das Ende vom 2ten umgeformten Tag nimmt, aber das ergibt irgendwie keinen Sinn, weil er ja einfach nur [php2]code[/php2] in diesen HTML String umsetzen soll....

                (Die [php2] jetz wegen dem selben Code im Forum)
                Zuletzt geändert von MaxPayne; 18.01.2003, 08:29.

                Kommentar


                • #9
                  du hast immer einen gierigen ausdruck ....

                  wenn du das mit (.*?) machst, sollte es klappen.

                  [color=red]das fragezeichen hinzufügen .... [/color]
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Dann kommt:

                    Warning: REG_BADRPT:repetition-operator operand invalid in C:\apache\htdocs\eigene\cms\area.php on line 324

                    Kommentar


                    • #11
                      häh

                      poste mal den schnippsel incl. demo text in einer stringvar.

                      ich schaue mir das hier mal an.
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        Ich hab beim Eintragen des Beitrags ne ereg_replace(); Anweisung die [IMG2]alternativ[/IMG2] in <img src="test.jpg" alt="alternativ umwandelt"> Das Problem tritt auf wenn ich 2 solcher Tagkonstruktionen im Beitrag hab. In der Db steht <img src="urli" alt="alti-text"><img src="url" alt="alt-text">. Wenn ich den Beitrag irgendwann mal wieder bearbeiten will, muss ich diese Tags ja wieder in das [IMG2]...[/IMG2] Format bekommen. Das versuche ich mit eregi_replace wie folgt:

                        PHP-Code:
                        $datensatz[beitrag] = eregi_replace ("(\<img src\=\")(.*)(\" alt\=\")(.*)(\"\>)""[img2=\\2]\\4[/img2]"$datensatz[beitrag]); 
                        Die Ausdrücke (.*) sind so gefräßig, dass sie bei 2 [img2] Konstruktionen den Anfaang des ersten umformatierten HTML Strings nehmen und den letzten des 2ten. Alles was dazwischen liegt, als eigentlich gewollte Strings und die der HTMl Formatierung werden als Ganzes genommen. Was ich nun bräuchte wäre eine Erweiterung des (.*) - Ausdrucks der solange Zeichen aufnimmt bis her "<img src="irgendwas" alt="irgendwas>" trifft.

                        Kommentar


                        • #13
                          habe nochmal das php-tag problem aufgegriffen.

                          habe preg_replace verwendet.

                          es klappt. zum test kannst du auch mal das fragezeichen entfernen ..

                          datei ist im anhang, weil das forum manchmal backslahes entfernt.

                          -> datei in .php umbenennen und testen
                          Angehängte Dateien
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar


                          • #14
                            Goil! preg_replace is wohl dochn bissl besser als eregi_replace, obwohl es noch aus Perl stammt. Leider ist die Funktion in meinem Buch ("Jetzt lerne ich PHP4 von Markt+Technik") nicht so ausführlich beschrieben. Könntest du noch ne Zeile entwerfen, die das ganze wieder umkehrt? Wie oben mit den IMG Tags?

                            Kommentar


                            • #15
                              warum umkehren????

                              du speicherst in der datenbank die spezial tags ab und fertig.

                              NUR BEI DER AUSGABE lässt du das durch preg_replace laufen.
                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Kommentar

                              Lädt...
                              X