Toon posts:

[php] regexp: <!--...--> weghalen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoe kan ik met een regular expression in PHP alle tekst die tussen comment-tags staat, verwijderen? Ik heb het al geprobeerd met
code:
1
$tekst = ereg_replace("<!--.*-->","",$tekst);

Dat lukte exchter niet, hij pakte namelijk de eerste <!-- en de laatste --> in de string en gooide alles wat daartussen zat, weg. Weet iemand hoe ik dat kan voorkomen?

Heb de search trouwens al gebruikt, en ook al wat tutorials doorgebladerd, maar daar kom ik dit probleem niet tegen...

Verwijderd

Op zaterdag 19 januari 2002 11:54 schreef sbesselsen het volgende:
Hoe kan ik met een regular expression in PHP alle tekst die tussen comment-tags staat, verwijderen? Ik heb het al geprobeerd met
code:
1
$tekst = ereg_replace("<!--.*-->","",$tekst);

Dat lukte exchter niet, hij pakte namelijk de eerste <!-- en de laatste --> in de string en gooide alles wat daartussen zat, weg. Weet iemand hoe ik dat kan voorkomen?

Heb de search trouwens al gebruikt, en ook al wat tutorials doorgebladerd, maar daar kom ik dit probleem niet tegen...
code:
1
$tekst = ereg_replace("<!--.*-->","",$tekst);

klopt toch al niet

moet zowieso dit zijn, dus 1 fout al weg, verder hek geen verstand van regex
code:
1
$tekst = ereg_replace("<!--(.*)-->","",$tekst);

Verwijderd

Topicstarter
Doet het nog steeds niet. Had ik trouwens ook al geprobeerd.

Verwijderd

volgensmij heb ik ooit eens het volgende gebruikt
$html = preg_replace("/<!--[^(-|--|-->)]*-->/", "", $html);

ik zal het meteen even uittesten, ik post je de resultaten

Verwijderd

code:
1
$tekst = ereg_replace("(<!--)(.*)(-->)","<!-- -->",$tekst);

werkend getest... ik snap allen niet at je ook niet meteen de comment tags er uit wil slopen :).

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op zaterdag 19 januari 2002 11:54 schreef sbesselsen het volgende:
hij pakte namelijk de eerste <!-- en de laatste --> in de string en gooide alles wat daartussen zat, weg. Weet iemand hoe ik dat kan voorkomen?
Dit heeft met zgn. greediness te maken. ereg_* is altijd greedy, en preg_* is niet greedy. Zoek maar eens met de search naar greediness of greedy of gulzigheid.

Verwijderd

Topicstarter
Op zaterdag 19 januari 2002 12:33 schreef SurfingFromAM2PM het volgende:
volgensmij heb ik ooit eens het volgende gebruikt
$html = preg_replace("/<!--[^(-|--|-->)]*-->/", "", $html);

ik zal het meteen even uittesten, ik post je de resultaten
Dat was hem! Hartstikke bedankt iedereen, en ik heb weer wat geleerd!

Verwijderd

weet je zeker dat deze werkt, ik krijg hem zelf niet werkend :)

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op zaterdag 19 januari 2002 12:38 schreef elnino het volgende:
Dit heeft met zgn. greediness te maken. ereg_* is altijd greedy, en preg_* is niet greedy. Zoek maar eens met de search naar greediness of greedy of gulzigheid.
preg_* is standaard ook greedy. dat kun je zo uitzetten:
code:
1
2
$str = preg_replace("/<!--.*-->/U", "", $str);
//                  ^ Ungreedy

(of .*? ipv .*)

Verwijderd

Topicstarter
Nee, d'r zijn inderdaad nog wat probleempjes. Ik zla nog eventjes kijken, dat van die greediness is het volgens mij. Ik meld het wel als het wel/niet lukt.

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op zaterdag 19 januari 2002 12:58 schreef marcusk het volgende:
preg_* is standaard ook greedy. dat kun je zo uitzetten:
code:
1
2
$str = preg_replace("/<!--.*-->/U", "", $str);
//                  ^ Ungreedy

(of .*? ipv .*)
Je kunt idd de modificator U of het teken ? achter .* te zetten. Niet allebei, want dan maak je het weer ongedaan.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
vandaar of (exclusieve of ;))

Verwijderd

Topicstarter
Okee, volgens mij heb ik ze:
code:
1
$data2 = preg_replace("/<!--(.*)-->/U","",$data2);

zorgt ervoor dat alle comments eruit gehaald worden. De 'U' op het eind geeft aan dat de match ungreedy is, en dat hij dus niet probeert een zo groot mogelijke match te vinden.

Een andere waar ik nog even naar zocht:
code:
1
preg_match("/<font color=\"Red\">(.*)<\/font>(([^A-Za-z0-9]*)|(<.*>))*$/Ui", $newElem)

Kijkt of er een rode tekst in voorkomt, die niet gevolgd wordt door meer tekst, maar mogelijk wél door een paar tags.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op zaterdag 19 januari 2002 13:38 schreef sbesselsen het volgende:
Okee, volgens mij heb ik ze:
code:
1
$data2 = preg_replace("/<!--(.*)-->/U","",$data2);
waarom zet je die haakjes om .* ? is namelijk nogal nutteloos (de regex wordt er zelfs iets trager van).

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op zaterdag 19 januari 2002 13:38 schreef sbesselsen het volgende:
Een andere waar ik nog even naar zocht:
code:
1
preg_match("/<font color=\"Red\">(.*)<\/font>(([^A-Za-z0-9]*)|(<.*>))*$/Ui", $newElem)

Kijkt of er een rode tekst in voorkomt, die niet gevolgd wordt door meer tekst, maar mogelijk wél door een paar tags.
Er zijn nog wel meer manieren om tekst rood te maken. Bijv: #FF0000 oid. Misschien kun je die er ook in verwerken.
Pagina: 1