NeoVanGoth: Mit preg_replace "umgekehrt" replacen

Guten morgen,

ich stehe gerade etwas auf dem Schlauch und grüble über mein altes Lieblings-Problem:
Ist es möglich, in einer Perl-kompatiblen RegEx in PHP gewissermaßen umgekehrt zu suchen?
Beispiel: Um alles innerhalb von Quotes zu replacen, würde ich z.B. preg_replace('/"[^"]*"/', '""', $foo) benutzen. Die Frage ist nun, wie das umgekehrt gehen würde, d.h. alles AUSSERhalb von Quotes zu entfernen.

Vielen Dank für die Hilfe

  1. hi,

    Beispiel: Um alles innerhalb von Quotes zu replacen, würde ich z.B. preg_replace('/"[^"]*"/', '""', $foo) benutzen. Die Frage ist nun, wie das umgekehrt gehen würde, d.h. alles AUSSERhalb von Quotes zu entfernen.

    Also vor einem " alles matchen, was selber kein " ist, dazwischen etwas, was kein " ist, dann noch mal ein schliessendes ", und alles nachfolgende, was kein " ist? Und dann vielleicht nur den Mittelteil übrig lassen?

    Sowas wie

    $text = 'Er sagte, "Hallo", und sie erwiderte, "Na, was gibt\'s?" - es war eine sehr interessante Konversation ...';  
    echo preg_replace('/[^"]*("[^"]*")[^"]*/u', '$1', $text);
    

    Ausgabe:
    "Hallo""Na, was gibt's?"

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hi,

    Die Frage ist nun, wie das umgekehrt gehen würde, d.h. alles AUSSERhalb von Quotes zu entfernen.

    sowas?
    $str = 'lala is lala und "foo" bar "foobar" lala';
    $reg =  "#[^"]*"([^"]*)"[^"]*#i";
    echo preg_replace ($reg, "\1 ", $str);

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
  3. Aaaaaaah ich Kaaskopp, da bin ich ja schön auf dem Schlauch gestanden!

    Vielen Dank nochmal!