Manu: Inhalt von HTML-Tag ändern...

Hallo zusammen,

ich möchte den Inhalt eines HTML-Elements bearbeiten. Das klappt mit dem folgenden Stück Code auch so wie gewollt:

  
$sString = preg_replace_callback('/<div>(.*)<\/div>/s', 'doSmth', $sContent);  

(doSmth ist meine Funktion, die den gewollten Inhalt liefert)

Die nächste Anforderung ist nun allerdings den Inhalt der benutzten CSS-Klasse (falls exsistent) entsprechend anzupassen. Hier komme ich absolut nicht weiter...
So wird bespw. kein <div>-Element gefunden...:(

  
$sString = preg_replace_callback('/<div( class=\"([^\"]*)\")?>(.*)<\/div>/s', 'doSmth', $sContent);  

Gruß,
Manu

--
Deutschland ist einfach von einer Diktatur der Nationalsozialisten zu einer Diktatur der Gutmenschen übergegangen.
  1. Hello Manu,

    $sString = preg_replace_callback('/<div( class="([^"])")?>(.)</div>/s', 'doSmth', $sContent);

    ---       ---

      
    Müssen die Backslashes hier nicht escaped werden?  
      
      
      
      
    Harzliche Grüße vom Berg  
    <http://bergpost.annerschbarrich.de>  
      
    Tom
    
    -- 
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen  
    Nur selber lernen macht schlau  
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)  
      
    ![](http://bitworks.de/~selfHTML/Virencheck.gif)  
    
    
    1. Müssen die Backslashes hier nicht escaped werden?

      Die escapen doch selber ;)
      habs aber im Falle der Anführungszeichen auch ohne Bachslashes versucht - mit dem gleichen Ergebnis.

      (Beispielsweise so:
      $sString = preg_replace_callback('/<div( class="(.*)")?>(.*)</div>/s', 'doSmth', $sContent);
      )

      Gruß,
      Manu

      --
      Deutschland ist einfach von einer Diktatur der Nationalsozialisten zu einer Diktatur der Gutmenschen übergegangen.
      1. Hello,

        Die escapen doch selber ;)

        Ja, genau. Aber das tun sie im Textmuster. Ich dachte, dass das aus einem PHP-Code stammt und daher '"' gesucht wird. Dann wäre der Backslash eines der gesuchten Zeichen und muss daher selber escaped werden

        habs aber im Falle der Anführungszeichen auch ohne Bachslashes versucht - mit dem gleichen Ergebnis.

        (Beispielsweise so:

        $sString = preg_replace_callback('/<div( class=\"(.*)\")?>(.*)</div>/s', 'doSmth', $sContent);

        )

        So wäre es für mich logisch.

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

        1. hmm, ich will eigentlich aus dem string hier

          texttext <div>Inhalt1</div> texttext
          texttext <div class="erste">Inhalt2</div> texttext
          texttext <div class="zweite">Inhalt3</div> texttext

          im ersten div Inhalt1, im zweiten div Inhalt2 und im dritten div Inhalt3 ersetzen (beim zweiten und dritten div brauche ich noch die strings "erste" bzw. "zweite", die als Parameter in meine Funktion einfließen)...

          Der String kommt aus einer Textarea und ist in meiner Debugausgabe nicht escaped...

          Gruß,
          Manu

          --
          Deutschland ist einfach von einer Diktatur der Nationalsozialisten zu einer Diktatur der Gutmenschen übergegangen.
  2. Falls die Lösung irgendjemanden interessieren sollte, hier ist sie:

    $sString = preg_replace_callback('@<div(?:[^>]+class="([^"]+)")?[^>]*>(.*)</div>@s', 'doSmth', $sContent);

    Gruß,
    Manu

    --
    Deutschland ist einfach von einer Diktatur der Nationalsozialisten zu einer Diktatur der Gutmenschen übergegangen.
    1. Hello,

      Falls die Lösung irgendjemanden interessieren sollte, hier ist sie:

      $sString = preg_replace_callback('@<div(?:[^>]+class="([^"]+)")?[^>]*>(.*)</div>@s', 'doSmth', $sContent);

      Fein.
      Ich persönlich würde aber noch den Modifier für Case Insensitive nehmen, vorausgesetzt natürlich, dass bei preg_replace_callback Case Sensitive der Default ist. Das habe ich jetzt nicht nachgeschaut.

      Und dann könntest Du eine modifizierte Lösung auch dem armen cromafi anbieten, der doch eigentlich "nur" versucht, den Text in einem <b> oder <i> doer sonstigem Textauszeichnungs-Elementen von dem außerhalb dieser Elemente zu isolieren... :-)

      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)