-
Hallo zusammen,
mit diesem Code:
entferne ich gut funktionierend sämtliche "a" Tags und Links.PHP-Code:$suchmuster = '#<a (.*)>(.*)</a>#';
$ersetzung = '\2';
$html = preg_replace($suchmuster, $ersetzung, $html);
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
-
Durch try and error gelöst:
Wie geht ihr bei Regex Problemen vor?Code :1
'~<a([^>]*)(class\\s*=\\s*["\']glossary["\'])([^>]*)>(.*?)</a>~i'
Besten Gruß,
Mike
-
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
Anstatt der echos wären dann eher asserts oder so angebracht. Keine Ahnung was es in PHP für Unit Test Möglichkeiten gibt.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";
?>
-
Tolle umfassende Antwort. Danke dafür.
Besten Gruß,
Mike
-
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
-
18.10.11 11:26 #6
Mein Vorschlag - ungetestet

!<a\s([^>]*)class=["']klasseX["']([^>]*)>([^>]*)</a\s*>!i
Ähnliche Themen
-
RegEx HTML Tags+INHALT entfernen
Von ReggaePanda im Forum PHPAntworten: 13Letzter Beitrag: 17.07.10, 13:29 -
Regex: Alle Links anpassen außer von <a href
Von Briefkasten im Forum PHPAntworten: 1Letzter Beitrag: 26.01.08, 19:22 -
Regex zH Herrn bzw Frau aus string entfernen
Von Briefkasten im Forum PHPAntworten: 1Letzter Beitrag: 04.09.07, 12:47 -
Mit RegEx Bereiche aus einer Mail entfernen
Von PeterSchmidt im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 2Letzter Beitrag: 13.09.05, 10:30 -
Alle HTML Tags aus einem String entfernen (regex)
Von Zatic im Forum PHPAntworten: 5Letzter Beitrag: 22.12.02, 16:40



1Danke


Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren