Konni: Regex gesucht

Hallo,

ich suche eine Regex, um nach übriggebliebenen Short-Open-tags zu suchen.

Das heißt, <? sollen gefunden werden, während <?php nicht gefunden werden sollen...

Konni

  1. @@Konni

    ich suche eine Regex, um nach übriggebliebenen Short-Open-tags zu suchen.

    Das heißt, <? sollen gefunden werden, während <?php nicht gefunden werden sollen...

    Steht nach Short-Open-Tags nicht ein Leerzeichen? Dann kannste nach '<? ' suchen. Wozu ein regulärer Ausdruck?

    LLAP 🖖

    --
    Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
    1. Hi Gunnar,

      Steht nach Short-Open-Tags nicht ein Leerzeichen? Dann kannste nach '<? ' suchen. Wozu ein regulärer Ausdruck?

      Hinter manchen ja, aber das ist nicht zwingend der Fall :-(

      Konni

    2. Hallo,

      Wozu ein regulärer Ausdruck?

      Wie war das mit den Spatzen, Tauben und Kanonen? Lieber ein spatzengroßes Loch in der Hand, als ein taubengroßes Loch im Dach, oder so.

      Gruß
      Kalk

    3. Tach!

      ich suche eine Regex, um nach übriggebliebenen Short-Open-tags zu suchen.

      Das heißt, <? sollen gefunden werden, während <?php nicht gefunden werden sollen...

      Steht nach Short-Open-Tags nicht ein Leerzeichen?

      Ja, steht nicht zwingend. Kann auch ein Zeilenumbruch oder ein Tabulator sein. In anderen Worten: irgendein Whitespace.

      Wozu ein regulärer Ausdruck?

      Damit man alle Whitespaces erwischt, ohne jeweils einzelne Suchdurchläufe machen zu müssen.

      <?(\s)

      Wozu die gruppierenden Klammern? damit man das konkrete Whitespace auch wieder hinter das <?php bekommt: <?php$1 oder so ähnlich. Muss Konni mal in die Bedienungsanleitung des Texteditors schauen. Vor allem auch, ob der die hier verwendete Regex-Syntax spricht oder vielleicht gar eine andere.

      dedlfix.

      1. Hi,

        <?(\s)

        Das findet JEDEN Whitespace.

        Weil <? bedeutet: ein oder KEIN <.

        cu,
        Andreas a/k/a MudGuard

        1. Tach!

          <?(\s)

          Das findet JEDEN Whitespace.

          Weil <? bedeutet: ein oder KEIN <.

          Du darfst ruhig auch sagen, wie es richtig geht: <?(\s)

          dedlfix.

          1. Du darfst ruhig auch sagen, wie es richtig geht: <?(\s)

            dedlfix.

            Danke an Euch. Scheint gut funktioniert zu haben.

            Konni

            1. <? sollen gefunden werden, während <?php nicht gefunden werden sollen Scheint gut funktioniert zu haben.

              Ooh, eine Regex Frage! Komme spaet, haette aber auch noch eine Idee.

              <?php
                ↑ hier beginnt ein Wort 
              

              Man spricht von einer Wortgrenze.

              Du suchst aber <? wenn es nicht an ein Wort grenzt. Dafuer gibt es das grosse \B. Ein Anker, der fuer eine Nicht-Worgrenze bzw. non-word boundary steht und auf eine entsprechende Position passt.

              Da das Fragezeigen innerhalb des Suchmusters eine spezielle Bedeutung, naemlich die eines Quantifiers fuer 0 oder 1 des vorangehenden Ausdrucks oder Zeichens hat, muss es mittels eines Backslashs maskiert werden, um ein literales Fragezeichen zu finden.

              <\?\B
              

              Findet also <? wenn es nicht an ein Wort grenzt. Es sollte auf jeden Fall mit PHP & Notepad++ (PCRE), aber auch Javascript oder Python funktionieren. Aber du hast es ja eh schon erledigt.

              Guten Abend! Jonny 5

              1. Tach!

                <\?\B
                

                Findet also <? wenn es nicht an ein Wort grenzt.

                Damit findet es aber auch <?=
                Wenn man das durch <?php ersetzt, kommt ungültige Syntax raus. Besser ist die Whitespace-Variante.

                dedlfix.

                1. Hallo Dedlfix!

                  Damit findet es aber auch <?=
                  Wenn man das durch <?php ersetzt, kommt ungültige Syntax raus. Besser ist die Whitespace-Variante.

                  Gut, dass du das erwaehnst! Fuer den Fall besser.

        2. Hi,

          <?(\s)

          Das findet JEDEN Whitespace.

          Weil <? bedeutet: ein oder KEIN <.

          kommt, wie dedlfix sagte auf den editor an. in vim waere das nicht so. da ist standardmaessig sehr viel mehr zeugs literal.

          dort koennte man z.b. nach /<?(_s)/ suchen (oder eben /\v<?(_s)/). die komplette ersetzung waere, wenn ich den threadverlauf richtig verstanden habe, etwa

          :%s/<?\(\_s\)/<?php\1/g
          

          oder

          :%s/\%(<?\)\@<=\(\_s\)/php\1/g
          

          in perl dagegen waere es etwas kuerzer:

          s/(?<=<\?)(\s)/php$1/g
          

          prost

          seth