php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.11.2010, 13:37  
Benutzer
 
Registriert seit: 31.03.2005
Beiträge: 80
Anotherone
Standard Regex Lookbehind mit Gruppe?

Ich versuche gerade, schlechtes HTML zumindestens insofern heil zu machen, das öffnende Tags auch schließende haben und das bestimmte Elemente in anderen nix verloren haben. So kommt es z.B. vor, das hr oder center sich in tr oder table (und nicht in td) befindet (das Tabellen und center Rotz ist, steht außer Frage). Desweiteren gibt es gelegentlich td, die kein Ende haben, sprich kein /td, sondern es folgt das nächste td. Ich wollte dies nun mittels eines Regex beheben:

Code:
/((?<!<\/?t(r|d)>)\s*<td>)/
bzw.

Code:
/((?<!<tr>|<\/td>)\s*<td>)/
Verwende ich nur tr oder /td, dann geht es, aber nicht die Vereinigung beider. Geht das nicht oder übersehe ich da was? Ich habe auch schon ein wenig via Google gesucht, aber diesen speziellen Fall (so auf Anhieb) nirgendwo gefunden.
Anotherone ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.11.2010, 14:40  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Erstmal scheint es mir als hättest du Klammern vergessen und zweitens kann (<tr>|<\/td>) ohnehin nicht als lookbehind funktionieren, da es keine feste Länge hat (notwendig!). Mit (<tr>|\/td>) müsste es funktionieren, wenn dir das genügt.
fab ist offline   Mit Zitat antworten
Alt 02.11.2010, 15:03  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Anotherone Beitrag anzeigen
Ich versuche gerade, schlechtes HTML zumindestens insofern heil zu machen, das öffnende Tags auch schließende haben und das bestimmte Elemente in anderen nix verloren haben.
Da würde ich gar nicht erst mit regex rangehen, sondern tidy nutzen ...
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 02.11.2010, 15:29  
Benutzer
 
Registriert seit: 31.03.2005
Beiträge: 80
Anotherone
Standard

@ChrisB Tidy macht es leider nur schlimmer, das ist dann völlig zerrissen... Das HTML ist wohl dafür zu kaputt.

@fab Ich habe es auch mit Klammern probiert, gleiches Ergebnis. Aber das mit der Längengleichheit war wichtig, damit geht es, wenn ich alle Leerzeichen zwischen Tags entferne und die beliebigen Leerzeichen \s* danach weglasse (sonst findet er zuviel). Vielen Dank!
Anotherone ist offline   Mit Zitat antworten
Alt 02.11.2010, 15:51  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
zweitens kann (<tr>|<\/td>) ohnehin nicht als lookbehind funktionieren, da es keine feste Länge hat (notwendig!)
Doch, das ist eine feste Länge. Probleme machen - glaube ich - nur die Quantifizierer.

Zitat:
das Tabellen [...] Rotz [sind], steht außer Frage
Blödsinn! Wenn du tabellarische Daten hast, sind diese auch als solche auszuzeichnen!

Ich kann das Problem nicht ganz nachvollziehen:
PHP-Code:
$string '<table><tr><td>sdfghsd

g<td>df,

ghdfkhf</td></tr><tr>

<td>leer<td>nicht leer</td>
</tr></table>'
;

echo 
preg_replace('/((?<!<tr>|<\/td>)\s*<td>)/''</td><td>'$string); 
funktioniert bei mir (jedenfalls so, wie ich das Problem verstanden habe).
Asipak ist offline   Mit Zitat antworten
Alt 02.11.2010, 20:08  
Benutzer
 
Registriert seit: 31.03.2005
Beiträge: 80
Anotherone
Standard

Eben keine tabellarischen Daten, sondern "Designtabellen". Und das ist (aus meiner Sicht) Murks, aber aktuell nicht mal eben zu ändern. Und da man gelegentlich den nicht hilfreichen Hinweis bekommen, doch auf sowas zu verzichten, wollte ich dem schonmal entgegenwirken. Ich gehöre nicht zu der Fraktion, die auf Krampf tabellarische Daten in DIV + CSS pressen (alles schon gesehen). Das Problem bei dem Regex ist, das er zuviel findet und ein /td nicht immer richtig ist, manchmal muss es ein öffnendes tr sein. Und mit dem Leerzeichen \s* fand er auch richtige Stellen, die einfach nur mehrere Leerzeichen haben, den das ist ja auch kein tr/td. Das Quantifizierer Streß machen, hatte ich auch gefunden.
Anotherone ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Kleine Regex Frage Bubelbub PHP-Fortgeschrittene 8 25.07.2010 23:39
Alle vorkommen mit regex finden terbaik PHP Tipps 2010 6 09.06.2010 20:52
Regex: MD5 überprüfen warkid PHP Tipps 2010 10 02.04.2010 02:54
[Erledigt] regex | variables wort herausfiltern Knechtle PHP Tipps 2010 6 05.03.2010 17:21
Probleme mit Regex laub PHP Tipps 2009 2 16.09.2009 11:33
Das Angreifen innerhalb der Gruppe ausschließen Lesnivila PHP Tipps 2009 4 06.03.2009 10:51
Array sortieren mit regex Lupi PHP Tipps 2008 3 21.07.2008 15:17
Regex: Auslesen der Meta-Tags einer Webseite Sucheingrenzung pepe24 PHP Tipps 2008 12 31.05.2008 15:41
2 Regex in PHP kompatible Syntax übersetzen NoiZy PHP-Fortgeschrittene 6 07.04.2008 09:04
Regex Link Problem Broadcast PHP Tipps 2008 2 29.02.2008 16:30
[gelöst :D ] regex tuts nur einmal pro zeile notyyy PHP Tipps 2008 17 24.09.2007 15:40
RegEx für Mail-Adresse (Bitte prüfen!) vollkommenegal PHP Tipps 2006 13 20.11.2006 20:02
habe ein paar fragen zu REGEX imported_kremser PHP Tipps 2006 11 31.01.2006 15:30
RegEx findet Stringvorkommen nicht PHP Tipps 2007 6 08.12.2005 21:52
Regex für attribute in quelltexten robo47 PHP Tipps 2005 6 27.01.2005 18:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
regex lookbehind, php lookbehind, regex gruppen, php regex gruppen, lookahead regex, regexp lookbehind feste länge, regexp gruppe ausschließen, .net regex lookbehind, regex lookbehind html tag, regex look behind, regex lookbehind innerhalb, regexp lookbehind tag, lookbehind php gruppen, regex gesamtlänge, reg ex lookbehinds, reg exp keine tabelle, regex gruppe, regex mehrere lookbehind, php regex lookahead, regex verschachtelte gruppen

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:12 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum