[PHP/RegExp] HTML commentaar vervangen door <!--

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Hallo,

Het is altijd weer even stoeien met die regular expressions. Welke koning vertelt me wat ik fout doe?

Wat is de bedoeling? Ik wil graag html commentaren (<!-- IETS WILLEKEURIGS -->) vervangen door (<!-- IETS WILLEKEURIGS -->) zodat deze gewoon getoond worden in een <textarea> box.

Nu heb ik dit geproduceerd om alleen nog maar even een volledig commentaren blok te vervangen door SHALALALA:

code:
1
$cnt = ereg_replace("(<!--)(.*^[<>])(-->)", 'SHALALALA', $cnt);


De uitleg van wat hier staat zoals ik het zie?

(<!--) Het moet beginnen met <!--
(.*^[<>]) Daarna volgt een willekeurig aantal willekeurige tekens, behalve < of >
(-->) Het moet eindigen met -->

Helaas (je raadt het al) doet deze RegExp helemaal niets met m'n string (die toch echt een html commentaar bevat).

Wie oh wie zegt me waarom ik een prutser ben?

Alvast veel dank!

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

kan je niet beter een str_replace gebruiken?
PHP:
1
$txt = str_replace(array('<!--','-->'),array('&lt;--','--&gt;'),$txt);

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik sluit me bij Erkens aan, maar als je het toch per se met een regexp wil, dan moet je deze maar eens proberen:
PHP:
1
$cnt = ereg_replace("<!--([^<>]*)-->", 'SHALALALA', $cnt);

[ Voor 14% gewijzigd door NMe op 24-01-2005 16:06 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 21:04

MBV

SHALALALALA bevat weinig html commentaar :P
Volgens mij klopt je tweede groep niet helemaal. De groep bestaat iets van een ongedefinieerde lengte(.*) gevolgd door 1 teken dat niet < of > is. Denk niet dat je er zo gaat komen :) Doet hij het wel als je dat ^[<>] weghaalt?

Los daarvan heeft Erkens wel een beetje gelijk. str_replace is iets 'transparanter' en veel sneller.

* MBV moet weer eens harder in het toetsenbord bijten :X. dankjewel NME voor het geven van de oplossing :)

[ Voor 17% gewijzigd door MBV op 24-01-2005 16:07 ]


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
_/-\o_

Helemaal top, dank voor de info, de RegExp van NME werkt inderdaad helemaal zonder problemen. Het complete plaatje is nu geworden:

code:
1
$cnt = ereg_replace("<!--([^<>]*)-->", '&lt;!--'."\\1".'--&gt;', $cnt);


En dat doet precies wat het moet doen.

De andere kant op is dan ook erg eenvoudig.

Ik kan natuurlijk inderdaad ook str_replace gebruiken. Maar ik had vanmiddag iets verzonnen waardm dat niet zou gaat werken/problemen zou opleveren ... hmm ... ik zal beide eens proberen.

In ieder geval ... nogmaals ... bedankt!

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

gvanh schreef op maandag 24 januari 2005 @ 16:13:
Ik kan natuurlijk inderdaad ook str_replace gebruiken. Maar ik had vanmiddag iets verzonnen waardm dat niet zou gaat werken/problemen zou opleveren ... hmm ... ik zal beide eens proberen.
str_replace kijkt niet naar de volgorde en zal dus ook "-->" of "<!--" of zelfs "--> <!--" als zelfstandig converten, met een regex zal hij deze gevallen niet converten.

Overigens lees ik nu pas dat het is voor in een textarea, waarom dan niet htmlentities() gebruiken?
Pagina: 1