tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von CPoly
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
249
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von SonMiko
    SonMiko SonMiko ist offline Mitglied Platin
    Registriert seit
    Jun 2005
    Beiträge
    662
    Hallo zusammen,

    mit diesem Code:
    PHP-Code:
    $suchmuster '#<a (.*)>(.*)</a>#';
    $ersetzung '\2';
    $html preg_replace($suchmuster$ersetzung$html); 
    entferne ich gut funktionierend sämtliche "a" Tags und Links.
    Nun will ich das ganze etwas verfeinern und nur noch "a"-tags entfernen
    die eine bestimmte Klasse haben. Leider sind meine Regex Kenntnisse begrenzt -
    wie gehe ich da am besten vor?
    Also beispielsweise "<a class="klasseX" .........>Text</a> soll -> Text ergeben.
     
    Besten Gruß,

    Mike

  2. #2
    Avatar von SonMiko
    SonMiko SonMiko ist offline Mitglied Platin
    Registriert seit
    Jun 2005
    Beiträge
    662
    Durch try and error gelöst:
    Code :
    1
    
    '~<a([^>]*)(class\\s*=\\s*["\']glossary["\'])([^>]*)>(.*?)</a>~i'
    Wie geht ihr bei Regex Problemen vor?
     
    Besten Gruß,

    Mike

  3. #3
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Zitat Zitat von SonMiko Beitrag anzeigen
    Wie geht ihr bei Regex Problemen vor?
    1. Erfahrung ist wie immer das wichtigste

    2. Gibt es diverse regex Tester, die einem evtl. weiter helfen (haben noch nie einen benutzt, aber andere schwören darauf) Beispiel: http://www.solmetra.com/scripts/regex/

    3. Schritt für Schritt

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    //Erst mal ein Beispiel, dass alles enthält, was kommen kann.
    //Vor und hinter dem class Attribut können andere Sachen stehen
    <a foooooo class="klasseX" baaaar>blah</a>
     
    //Alles was belibig ist durch (.*?) ersetzen
    <a (.*?)class="klasseX"(.*?)>(.*?)</a>
     
    //Escapen von Zeichen mit besonderer Bedeutung
    <a (.*?)class="klasseX"(.*?)>(.*?)<\/a>
     
    //Ab damit in einen PHP String (eventuell nochmal escapen)
    '<a (.*?)class="klasseX"(.*?)>(.*?)<\\/a>'

    Tests erstellen

    PHP-Code:
    <?php
      $rx 
    '/<a (.*?)class="klasseX"(.*?)>(.*?)<\\/a>/';

      echo 
    preg_replace($rx'''<a class="klasseX"></a>');
      echo 
    "\n";
      echo 
    preg_replace($rx'''<a class="klasseX">foo</a>');
      echo 
    "\n";
      echo 
    preg_replace($rx'''foo <a class="klasseX">bar</a> baz');
      echo 
    "\n";
      echo 
    preg_replace($rx'''foo <a class="klasseX" style="color:red;">bar</a> baz');
      echo 
    "\n";
      echo 
    preg_replace($rx'''foo <a href="#bacon" class="klasseX" style="color:red;">bar</a> baz');
      echo 
    "\n";
      echo 
    preg_replace($rx'''foo <a href="#bacon" class="klasseX" style="color:red;">bar</a> baz foo <a href="#bacon" class="klasseX" style="color:red;">bar</a> baz');
      echo 
    "\n";
    ?>
    Anstatt der echos wären dann eher asserts oder so angebracht. Keine Ahnung was es in PHP für Unit Test Möglichkeiten gibt.
    SonMiko bedankt sich. 

  4. #4
    Avatar von SonMiko
    SonMiko SonMiko ist offline Mitglied Platin
    Registriert seit
    Jun 2005
    Beiträge
    662
    Tolle umfassende Antwort. Danke dafür.
     
    Besten Gruß,

    Mike

  5. #5
    CPoly CPoly ist offline Mitglied Weizenbier
    tutorials.de Premium-User
    Registriert seit
    Sep 2009
    Beiträge
    2.445
    Sehe gerade, dass ein paar Dinge bestimmt besser sein könnten. Z.B. können die Attribute ja auch in einfachen Hochkommas anstatt in Anführungsstrichen stehen. Aber da tut es ja ein einfaches ("|').

    Die Feinheiten kannst du ja selbst machen
     

  6. #6
    Avatar von Anna Bolika
    Anna Bolika Anna Bolika ist offline Mitglied Silber
    Registriert seit
    Jan 2011
    Beiträge
    75
    Mein Vorschlag - ungetestet

    !<a\s([^>]*)class=["']klasseX["']([^>]*)>([^>]*)</a\s*>!i
     

Ähnliche Themen

  1. RegEx HTML Tags+INHALT entfernen
    Von ReggaePanda im Forum PHP
    Antworten: 13
    Letzter Beitrag: 17.07.10, 13:29
  2. Regex: Alle Links anpassen außer von <a href
    Von Briefkasten im Forum PHP
    Antworten: 1
    Letzter Beitrag: 26.01.08, 19:22
  3. Regex zH Herrn bzw Frau aus string entfernen
    Von Briefkasten im Forum PHP
    Antworten: 1
    Letzter Beitrag: 04.09.07, 12:47
  4. Mit RegEx Bereiche aus einer Mail entfernen
    Von PeterSchmidt im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 2
    Letzter Beitrag: 13.09.05, 10:30
  5. Antworten: 5
    Letzter Beitrag: 22.12.02, 16:40

Stichworte