[php] string replace, kom er niet uit.

Pagina: 1
Acties:
  • 138 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met de tweakers.net meuktracker een beetje te parsen voor mn nieuwe active desktop.
Het zal wel helemaal aan mij liggen, maar de handleidingen op php.net zijn niets meer dan absoluut wazig, of het geen ik daadwerkelijk wil vinden, is verrekte goed verstoppeld ofzo.

Ik ben niet handig met xml_parse dus dat gedeelte heb ik maar even voor de makkelijkheid geskipped ... :/

Ik beschouw het gewoon als een txt bestand, alles lijkt ook vrij leuk te werken, behalve mijn laatste (belangrijkste) stukje:

Ik wil alle zooi eruit halen :)

ff voor de makkelijkheid mijn code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
  // Tweakers.NET Turbotrekker Parsen :)
  // link: http://www.tweakers.net/turbotracker.dsp
  // Backup, testen even braaf lokaal doen, braaf blijven tegen t.net server :)
  //  $Pmeuk = "http://www.tweakers.net/turbotracker.dsp";
  // Lokale file pakken
  $Pmeuk = "./turbotracker.dsp";
  $Rmeuk = fopen($Pmeuk,r);
  if (!$Rmeuk) { die("Kon file <B>" . $Pmeuk . "</B> niet openen :(<BR>"); }
  $Cmeuk = fread($Rmeuk, filesize($Pmeuk));
  $Cmeuk = str_replace("<nieuwsposting>", "<table border=1><tr><td>", $Cmeuk);
  $Cmeuk = str_replace("<id>", "<A HREF='http://www.tweakers.net/nieuws/", $Cmeuk);
  $Cmeuk = str_replace("</id>", "'>", $Cmeuk);
  $Cmeuk = str_replace("<titel>", "", $Cmeuk);
  $Cmeuk = str_replace("</titel>", "</A>", $Cmeuk);
  // Dit is de regel die ik niet goed krijg :(
  $Cmeuk = ereg_replace("<editor[^>]*/editor>", "", $Cmeuk);
  $Cmeuk = str_replace("</nieuwsposting>", "</table>", $Cmeuk);

  echo "<PRE>$Cmeuk</PRE>";


Ik wil ALLES van <editor> t/m </reacties> gewoon weghebben.
Klinkt simpel, echter blijkt dat niet zo te zijn :)
Ik krijg niet eens alles tussen <editor> en </editor> eruit, anders had ik het per object gedaan... Maar ook dat krijg ik niet voor elkaar.
Ik heb inmiddels vanalles geprobeert met die regel ...
$Cmeuk = ereg_replace("<editor[^>]*/editor>", "", $Cmeuk);
Heeft iemand ervaring hiermee, en kan mijn regeltje aanpassen ??

[ Voor 13% gewijzigd door Verwijderd op 11-06-2003 11:04 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

zoals je het nu neerzet probeer je <editorbladiebla/editor> te vinden, er mag geen > in voorkomen volgens jouw regexp...

Als die editor-tag geen parameters heeft zou ik het zo doen:
PHP:
1
ereg_replace("<editor>.*</editor>", "", ...);

Acties:
  • 0 Henk 'm!

  • WildernessChild
  • Registratie: Februari 2002
  • Niet online

WildernessChild

Voor al uw hersenspinsels

Probeer eens met "<editor.*</editor>"? (Tenminste, ik geloof dat / geen speciaal regexp character is)
edit:
Te laat... -- Die van mij werkt ook met attributen aan de tag :)

edit:
@MBV: dan zal het wel de beste oplossing zijn ;)

[ Voor 55% gewijzigd door WildernessChild op 11-06-2003 11:15 ]

Maker van Taekwindow; verplaats en resize je vensters met de Alt-toets!


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 18-09 15:29

MBV

Dat van editor is vrij logisch, lijkt mij. Je zoekt alle tekens die geen > zijn. dus "<editor>" werkt al niet: daar is al een haak sluiten! Als je nu gewoon "<editor.*/editor>" gebruikt, heb je dat er iig uit. Ik weet alleen niet of je zomaar wat tekst erin mag kwakken, ik ga even uitzoeken hoe ereg ook al weer precies werkte :)

edit:
3 zielen, 1 gedachte :)

[ Voor 21% gewijzigd door MBV op 11-06-2003 11:14 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
3 zielen, 1 gedachte :)
nice :)
1 nadeel: hij haalt alles weg vanaf de allereerste <editor> t/m de allerlaatste </editor>

wups :)

Ik denk dat het nu meer zaak voor mij wordt om die file regel voor regel in een array te plaatsen ofzo ??

ps. PHP manual is niet echt duidelijk IMO ik wist niet dat [^>] een uitzondering was ...

Anyway, regel voor regel inlezen een oplossing? of is er wat makkelijkers ?

Acties:
  • 0 Henk 'm!

  • Kwai_gon_jinn
  • Registratie: Januari 2001
  • Niet online

Kwai_gon_jinn

[-geen icon-]

heel simpel :7

PHP:
1
$Cmeuk = ereg_replace("(\<editor\>)(.*)(<\/editor\>)", "", $Cmeuk);

output word noppes

PHP:
1
$Cmeuk = ereg_replace("(\<editor\>)(.*)(<\/editor\>)", "\\2", $Cmeuk);


output wordt.. alles wat tussen <editor> en </editor> staat

[ Voor 20% gewijzigd door Kwai_gon_jinn op 11-06-2003 11:34 . Reden: foutje.. vergat een "(" ]

Confucius said: "In ancient time, learning was for self. Nowadays learning is for others."


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Kwai_gon_jinn schreef op 11 June 2003 @ 11:28:
heel simpel :7

PHP:
1
$Cmeuk = ereg_replace("/\<editor\>)(.*)(<\/editor\>)", "", $Cmeuk);

output word noppes

PHP:
1
$Cmeuk = ereg_replace("/\<editor\>)(.*)(<\/editor\>)", "\\2", $Cmeuk);


output wordt.. alles wat tussen <editor> en </editor> staat
euh ... die doet dus helemaal niets :)

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 18-09 15:29

MBV

@Kwai_gon_jinn: wat bedoel je met die slashes? < en > mocht je toch gewoon gebruiken in ereg? Ook zie ik dat je geen haakje opent. Is dat alles vanaf het begin o.i.d.? volgens mij kan je om alles tussen editor tags te halen beter de volgende gebruiken:
PHP:
1
 $Cmeuk = ereg_replace("<editor>(.*)</editor>","\\2",$Cmeuk);


@Zilverdael: Volgens mij hoort hij bij de eerste /editor tag weer te stoppen. Dat zou je dus even moeten testen.

Acties:
  • 0 Henk 'm!

  • Kwai_gon_jinn
  • Registratie: Januari 2001
  • Niet online

Kwai_gon_jinn

[-geen icon-]

in RegExp hebben < en > een speciale betekenis en horen ze eigenlijks in [] te staan ( [<>] )

en jah vergat een "(" maar had ik ge-edit :)

anders pak je ff de Perl RegExp manual erbij. kan je het nalezen. waarom ik er een \ voor heb gezet is om de < en > te escapen

Confucius said: "In ancient time, learning was for self. Nowadays learning is for others."


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Magoed, je zit dus met greediness van ereg en ik geloof dat je die niet kan inperken, in pcre-regexp kan dat wel.
PHP:
1
preg_replace("<editor>.*?</editor>", "", ...);

Hier is de greediness beperkt tot het minste, ipv het ruimste. Zie in de P&W-faq over regexp wat greediness inhoud

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
euh ... can you say ... Werkt niet?! :)

Die edit van jou kwam net ff te laat, had al gereplied ... mijn excuses ... iig werkt het nu nog niet :/
Alles blijft netjes in de var staan, het is alsof hij de gehele regel negeert :(

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Ow darn, laat ik het wel goed voorzeggen dan :P

PHP:
1
preg_replace('/<editor>.*?<\/editor>/smi', "", ...);

De // geven de boundaries aan, de /s, /m en /i respectievelijk dat de pcre-engine ook de newline bij de . moet rekenen, de m dat ie over meerdere regels moet zoeken en de i dat ie hoofdletterongevoelig moet zoeken (just in case) :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ACM: toppie! Werkt :)

Acties:
  • 0 Henk 'm!

  • Kwai_gon_jinn
  • Registratie: Januari 2001
  • Niet online

Kwai_gon_jinn

[-geen icon-]

kees klooost :+

Confucius said: "In ancient time, learning was for self. Nowadays learning is for others."


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het resultaat :)

Misschien leuk om het resultaat van jullie inspanningen te zien ;)

(Dit is het begin van me active desktop dingetje)

[ Voor 17% gewijzigd door Verwijderd op 11-06-2003 15:12 ]

Pagina: 1