Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

regexp vs. catcat

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
catcat
PostRank 10
PostRank 10
Beiträge: 10292
Registriert: 02.08.2006, 13:21
Wohnort: Litauen

Beitrag von catcat » 16.05.2011, 14:26

Bis jetzt steht es so ca. 50:0.

Wie lösche ich mit regexp alles zwischen einem <table> und einem </table> raus?
Ich hab schon so viele Fragezeichen, Sternchen und komische Klammern versucht, aber irgendwie...

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


webtechnixx
PostRank 2
PostRank 2
Beiträge: 41
Registriert: 24.11.2009, 16:06
Wohnort: Worms

Beitrag von webtechnixx » 16.05.2011, 14:44

Hallo, versuchs doch mal damit:

Code: Alles auswählen

$regex_pattern = '/<table>&#40;.*&#41;<\/table>/iUms';
preg_match&#40;$regex_pattern, $zufilternderinhalt, $ergebniss&#41;;
$result = str_replace&#40;"'",'"',$ergebniss&#91;1&#93;&#41;;

vipa
PostRank 4
PostRank 4
Beiträge: 165
Registriert: 08.01.2010, 13:32

Beitrag von vipa » 16.05.2011, 14:46

Wichtig ist in so einem Fall, Regex auf "ungreedy" zu stellen, sonst löscht er alles zwischen der ersten und letzten Tabelle :-)

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 16.05.2011, 14:51

Wobei das allgemein etwas schwieriger werden dürfte. Was ist, wenn eine Tabelle in der Tabelle ist, dann löscht der aus beiden einen Teil und es kommt Chaos raus ;-)

Anonymous

Beitrag von Anonymous » 16.05.2011, 18:38

wie is der aktuelle Stand?

Kassandra70
PostRank 4
PostRank 4
Beiträge: 198
Registriert: 11.01.2006, 00:48
Wohnort: Gran Canaria

Beitrag von Kassandra70 » 16.05.2011, 19:10

@Synonym
das kannst du mit durchzählen (substr_count) abfangen. So habe ich es zumindest mal gelöst.
https://www.anabell.de - ein nicht optimiertes Projekt mit tausend Themen

catcat
PostRank 10
PostRank 10
Beiträge: 10292
Registriert: 02.08.2006, 13:21
Wohnort: Litauen

Beitrag von catcat » 16.05.2011, 20:47

Öh... ich hab ne CSV mit Produktdaten drinne. So über 1000 Produkte mit gut 15.5k Zeilen.
Und da ist immer in jedem Produkt ne Tabelle reingefriemelt worden, die ich jetzt aber raus haben will.
Es ist also keine tabelle in anderen tabellen da: Die sind alle schön hintereinander.

Und jetzt such ich mal, was "ungreedy" wohl sein mag :oops:

profo
PostRank 9
PostRank 9
Beiträge: 1703
Registriert: 18.01.2007, 18:51

Beitrag von profo » 16.05.2011, 20:59

Ooch, ist leider nur einen Einzeiler wert :-(

Nimmst Du perl per Kommandozeile:

Code: Alles auswählen

perl -pe 's/<table>.*?<\/table>//i' schrott.csv > schoen.csv
Im "greedy" mode nimmt Perl das längstmögliche passende Ergebnis. Mit einem "nicht greedy" (einfach ein Fragezeichen an den Stern anhängen) nimmt Perl das kürzestmögliche passende Ergebnis.

Anonymous

Beitrag von Anonymous » 16.05.2011, 21:02

catcat hat geschrieben:Und jetzt such ich mal, was "ungreedy" wohl sein mag :oops:
greedy bedeutet "hungrig", also das ein regulärer Ausdruck immer so viel wie möglich erfasst, während ungreedy eben das Gegenteil bedeutet, das eben der erfasste Teil so klein wie möglich ist....

wenn es jeweils nur 1 Tabelle gibt, ist es egal, da hier ja kleinst- und größtmögliche Ergebnis identisch ist...

wie sieht denn so ein Datensatz in etwa aus, und wie willst du ihn haben...

Aber trotzdem müssen wir dann wissen wieviele Anläufe du nach dem 50:0 noch gebracht hast, wir müssen die Wette ja irgendwann auch auflösen können... :roll:

Anonymous

Beitrag von Anonymous » 16.05.2011, 21:11

profo hat geschrieben:

Code: Alles auswählen

perl -pe 's/<table>.*?<\/table>//i' schrott.csv > schoen.csv
ich glaube das hast du nicht ganz zuende gedacht... das ergibt doch nur das was sich innerhalb der Table befindet, alle anderen Felder im csv sind auch mit weg....

profo
PostRank 9
PostRank 9
Beiträge: 1703
Registriert: 18.01.2007, 18:51

Beitrag von profo » 16.05.2011, 21:13

net(t)worker hat geschrieben:
profo hat geschrieben:

Code: Alles auswählen

perl -pe 's/<table>.*?<\/table>//i' schrott.csv > schoen.csv
ich glaube das hast du nicht ganz zuende gedacht... das ergibt doch nur das was sich innerhalb der Table befindet, alle anderen Felder im csv sind auch mit weg....
Nee, ist praktisch ausprobiert und sollte demnach eigentlich funktionieren. Das "s/" ist doch das "substitute"; damit wird also der gefundener Code-Teil gelöscht. Der Rest liegt in der "-p" - Magie von Perl :)

PS: falls die table-Dinger über mehrere Zeilen gehen, funktioniert der obige Code nicht. Dann müsste es so heißen:

Code: Alles auswählen

perl -e 'local $/; $_=<>; s/<table>.*?<\/table>//isg; print' schrott.csv > schoen.csv

Antworten