m-Modifizierer geht nicht?

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

  • m-Modifizierer geht nicht?

    Hallo,

    ich versuche gerade einen eigenen BBcode-parser zu basteln, hab mir das Regex-tut auf dieser seite angeguckt und nun stehe ich vor einem problem:

    in dieser zeile funktioniert der m-modifizierer nicht

    $text = preg_replace("!\[b\](.*?)\[/b\]!mi", "<b>$1</b>", $text);

    anm.: kann kein [code] verwenden weil sonst das [b\] durch <b> ersetzt wird!

    Könnt ihr mir bitte helfen, danke!!!!!

    mfg,
    siegi

  • #2
    If there are no "\n" characters in a subject string, or no occurrences of ^ or $ in a pattern, setting this modifier has no effect.

    Was steht wohl im Tutorial über den m-modifier??

    Ohne nachzuschauen, vielleicht muss der replace-string in '...' stehen, dies wegen dem $1.
    Zuletzt geändert von gleiwitz19; 31.07.2006, 18:10.

    Kommentar


    • #3
      hallo,

      im tut steht nix darüber ...

      und mit '...' statt "..." ändert sich auch nix!

      wie soll ich denn jetzt ^ oder $ einbauen damit ich das gleiche ergebnis bekomme, ich blicke da nicht so durch ...

      danke!!!
      Zuletzt geändert von siegi44; 31.07.2006, 18:26.

      Kommentar


      • #4
        "funktioniert nicht" ist sowieso nichts rechtes. Im geposteten ist an sich kein Fehler, ausser dass ein unnützer m-modifier vorkommt.

        Kommentar


        • #5
          Code:
          [ b]asdf
          asdfs
          [ /b]
          anm. ich habe eine leerstelle in die tags gemacht damit man sie sieht!!
          wird nicht zu

          asdf
          asdfs


          deswegen habe ich den m-modifizierer eingebaut, aber da sich da nichts ändert würde ich gerne wissen, wie ich

          $text = preg_replace("!\[b\](.*?)\[/b\]!mi", "<b>$1</b>", $text);

          ändern muss damit der erwartete effekt kommt ??

          danke!
          Zuletzt geändert von siegi44; 31.07.2006, 19:06.

          Kommentar


          • #6
            wenn du alles zwischen den b-tags matchen willst (inkl. zeilenumbruch), dann benutze das:
            Code:
            "!\[b\](.*)\[/b\]!isU"
            wozu soll der modifier m in deinem fall dazu gut sein?

            Kommentar


            • #7
              Du hättest gescheiter das hier gepastet, es ist nämlich die Erklärung:

              s - If this modifier is set, a dot metacharacter in the pattern matches all characters, including newlines.

              Und sein ( : ? und den Rest belassen wie es war, es war nämlich richtig.

              Also war der Fehler, ein m anstatt ein s zu haben (ich wusste es nicht)

              Kommentar


              • #8
                Original geschrieben von gleiwitz19
                Und sein ( : ? und den Rest belassen wie es war, es war nämlich richtig.
                meinst du diesen teil: (.*?)
                dort ist das '?' wirklich überflüssig.
                und was meinst du mit "und den Rest belassen " - was habe ich noch geändert?

                achso, der modifier 'U' ist auch nicht ganz unwichtig, aber da kannst du ja bestimmt etwas schlaues zu pasten
                Zuletzt geändert von 3DMax; 31.07.2006, 21:56.

                Kommentar


                • #9
                  Original geschrieben von 3DMax
                  meinst du diesen teil: (.*?)
                  dort ist das '?' wirklich überflüssig.
                  und was meinst du mit "und den Rest belassen " - was habe ich noch geändert?

                  achso, der modifier 'U' ist auch nicht ganz unwichtig, aber da kannst du ja bestimmt etwas schlaues zu pasten
                  Da du gefragt hast. In deiner Antwort wurde unnötigerweise
                  (1)das ? durch das U ersetzt. Der Modifier U ist gleichwertig zum ?.
                  (2) Die Reihenfolge der modifiers umgedreht. Die modifiers bleiben dadurch gleichwertig.

                  Bezüglich dieser Punkte war nichts falsch, und es war nicht die Thread-Frage. Ich tendiere dazu, Fragen schonend zu beantworten anstatt möglichst viel anders zu machen. Frager hatte nur einen modifier, einen einzigen Buchstaben falsch, und vermutlich verwechselt, oder schlecht instruiert bekommen, oder sowas. Zuzugeben, dass ich es nicht gewusst habe. Frager hatte das ungreedy und das i drin.

                  Kommentar


                  • #10
                    Original geschrieben von gleiwitz19
                    [B]Da du gefragt hast. In deiner Antwort wurde unnötigerweise
                    (1)das ? durch das U ersetzt. Der Modifier U ist gleichwertig zum ?.
                    (2) Die Reihenfolge der modifiers umgedreht. Die modifiers bleiben dadurch gleichwertig.
                    ja, da muss ich dir "leider" recht geben (hab's direkt mal ausprobiert), aber jeder hat nun mal seine eigenen regex-vorlieben


                    bleibt nur noch die frage offen, ob unsere lösung auch im sinne des ops ist.

                    Kommentar


                    • #11
                      Original geschrieben von siegi44
                      [Bwürde ich gerne wissen, wie ich

                      $text = preg_replace("!\[b\](.*?)\[/b\]!mi", "<b>$1</b>", $text);

                      ändern muss damit der erwartete effekt kommt ??
                      [/B]
                      hier die 'offizielle' Antwort (Patenteigentümer ist 3DMax):

                      $text = preg_replace("!\[b\](.*?)\[/b\]!si", "<b>$1</b>", $text);

                      und 'inoffiziell' gibt es noch einige Spielarten davon.

                      Kommentar


                      • #12
                        ey, du bist genauso patenteigentümer.

                        ps: wollte dir gerade eine mail schicken - ging nicht. wollte dir nur schreiben, dass es h31ss, äh heiss ist - kühlt aber langsam ab

                        Kommentar


                        • #13

                          Kommentar


                          • #14
                            hallo,
                            • s

                              Der s-Modifier veranlasst den Parser dazu, die Zeichenkette, auf die der reguläre Ausdruck angewendet wird, in einzelne Zeilen zu unterteilen - das Pattern wird hierbei also nicht auf die ganze Zeichenkette bezogen, sondern jede Zeile einzeln behandelt
                            • m

                              Der m-Modifier ist das Komplement zum s-Modifier: Die Zeichenkette wird nicht in Zeilen aufgetrennt, sondern im Ganzen behandelt.
                            ich hatte gemeint weil eben der m-Modifier die zeichenkette als ganzes behandelt ignoriert der die \n und so geht das pattern weiter über das zeilenende bis zum [/b] tag ...

                            da hab ich mich wohl geirrt ...

                            jetzt geht es nämlich!!! (durch s statt m)

                            danke für eure hilfe!!

                            mfg,
                            siegi
                            Zuletzt geändert von siegi44; 01.08.2006, 08:21.

                            Kommentar

                            Lädt...
                            X