Simone: Negierung regex

Hi,

Ich möchte gerne eine Negierung
des Ausdruckes:

$text = preg_replace("=(\b\w+\b)=im",' ',$text);

erreichen

also alles was kein  Wort ist soll ersetzt werden.

Danke Simone

  1. Ich möchte gerne eine Negierung
    des Ausdruckes:

    $text = preg_replace("=(\b\w+\b)=im",' ',$text);

    erreichen

    also alles was kein  Wort ist soll ersetzt werden.

    Falls ich dich richtig verstehe, z.B. einfach die Shift festhalten, wärend Du die w-Taste drückst.

    \w ein Buchstabe, eine Ziffer oder der Unterstrich, also [a-zA-Z_0-9] (und evtl. weitere Buchstaben, z. B. Umlaute)
    \W ein Zeichen, das weder Buchstabe noch Zahl noch Unterstrich ist, also [^\w]

    1. Danke für die Antwort

      Ich möchte aus einen *.txt sämtliche Wörter ersetzen die dem Muster
      [a-züöäß] nicht entsprechen.

      Der die Wörter sind durch Leerzeichen von einander getrennt.

      Danke Simone

      1. Hello,

        Danke für die Antwort

        Ich möchte aus einen *.txt sämtliche Wörter ersetzen die dem Muster
        [a-züöäß] nicht entsprechen.

        Der die Wörter sind durch Leerzeichen von einander getrennt.

        Das ist mMn mit Regular Expressions alleine nicht möglich.

        Du kannst zwar mit positiven und negativen 'Assertions' arbeiten, also Muster finden, die oder die nicht von einem anderen Muster eingeleitet oder gefolgt werden, aber "Nicht-Muster" zu finden ist von der Logik her wohl nicht möglich. Wo soll das Muster beginnen und wo soll es enden? Eine Verschiebung von Beginn oder Ende würde ja schon ausreichen, dass das Muster _nicht_ mehr zutrifft.

        Du könntest das, wenn die Worte alle durch Leerzeichen getrennt werden, in mehrere Schritten erledigen. Aufteilung des Gesamtzeichenkette in einzelne 'Worte' mit explode(), dann das Array mit foreach() ablaufen und eventuell jetzt mit einem regulärem Ausdruck testen, ob das Wort dem Muster entspricht. Wenn es das nicht tut, ersetze oder lösche das Arrayelement, ganz nach Belieben.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Hi,
          Tom

          Sweit bin ich

          $text = preg_replace("=(.+)\s=siU",'[\1]',$text);

          macht ja ein Splitt für jedes Wort jetzt muss nur noch die Bedingung rein
          das wenn in (.+) ein nicht erlaubtes Zeichen enthalten ist dieses durch
          'nichts' ersetzt wird.

          Sollte garnicht so schwer sein ;o)

          Simone

          1. Hi

            Lösung gefunden

            Naja ist zwar einwenig ...... aber geht

            $text = preg_replace_callback(
                        "=(.*)\s=siU",
                        "sring_update",
                        $text);

            function sring_update($sring)
            {
            print_r($sring);
            if(preg_match("=^([a-zA-Z]+)$=i",trim($sring[0])))
            {
            return trim($sring[0]).' ';
            }
            else
            {
            return '';
            }

            }