[php] Regxp werkt niet...

Pagina: 1
Acties:

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
Hallo, ik vroeg me af wat hier nou mis mee is:
PHP:
1
$output = eregi_replace("<meta name=\"generator\" content=\"(.*)\">\n", "<meta name=\"generator\" content=\"Onbelangrijk\">", $output);


Hij verwijdert namelijk alles na content=\"(.*)\">\n behalve </body></html>.

Verwijderd

[^"] betekent: elk teken, behalve "
[^"]* is dus een teeks tekens tot aan een " of het eind van de string.
"[^"]*" is een reeks tekens die met " begint en eindigt, maar waar geen " tussen staat.
"([^"]*)" idem, maar nu wordt de reeks tekens tussen " en " onthouden.

Je zou het ook nog anders kunnen doen, namelijk:

"(.*?)" dit levert hetzelfde op, die extra ? modifier achter * maakt die star ungreedy en zal daarom zo weinig tekens als mogelijk tussen die dubbele quotes proberen te krijgen.

.* zonder die ? zal altijd zoveel mogelijk "opvreten", en dus in eerste instantie de hele rest van de string pakken. Als er dan geen match mogelijk is laat die groep 1 teken los, en probeert weer te matchen. Als je dus ergens verderop in je document de reeks na .* zou hebben, ">\n in jouw geval, dan is de match dus niet wat je eigenlijk wilde.

Verwijderd

Verwijderd schreef op 19 september 2002 @ 17:37:
[^"] betekent: elk teken, behalve "
[^"]* is dus een teeks tekens tot aan een " of het eind van de string.
"[^"]*" is een reeks tekens die met " begint en eindigt, maar waar geen " tussen staat.
"([^"]*)" idem, maar nu wordt de reeks tekens tussen " en " onthouden.

Je zou het ook nog anders kunnen doen, namelijk:

"(.*?)" dit levert hetzelfde op, die extra ? modifier achter * maakt die star ungreedy en zal daarom zo weinig tekens als mogelijk tussen die dubbele quotes proberen te krijgen.

.* zonder die ? zal altijd zoveel mogelijk "opvreten", en dus in eerste instantie de hele rest van de string pakken. Als er dan geen match mogelijk is laat die groep 1 teken los, en probeert weer te matchen. Als je dus ergens verderop in je document de reeks na .* zou hebben, ">\n in jouw geval, dan is de match dus niet wat je eigenlijk wilde.
lekker uitgelegd.. hoe leer jij dit zo goed man ? ik wil dit ook leren.. ik ben overgens niet te topic starten.. (als je denkt dat ik clone account oid heb :P)

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
Ja, ik heb het geprobeerd met deze code:
PHP:
1
$output = eregi_replace('<meta name=\"generator\" content="([^"]*)">\n', "<meta name=\"generator\" content=\"X-Interactive.nl nieuwsbrief mailer\">", $output);

Maar hij vindt nu gewoon niets... waar zou dit aan kunnen liggen

[ Voor 0% gewijzigd door Slagroom op 19-09-2002 18:45 . Reden: nog wat toegevoegd ]


Verwijderd

Verwijderd schreef op 19 September 2002 @ 18:11:

lekker uitgelegd.. hoe leer jij dit zo goed man ? ik wil dit ook leren.. ik ben overgens niet te topic starten.. (als je denkt dat ik clone account oid heb :P)

Ik stelde ook ooit eens een dergelijke vraag, en toen kreeg ik als antwoord van tomato, dat ik maar eens naar het boek "Mastering Regular Expressions" moest kijken, van E.F. Friedl (gepubliceerd door O'Reilly & Associates).

Ik heb dat boek aangeschaft, en voor het grootste deel gelezen, en ben nog steeds erg tevreden met die tip van tomato :)

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
Verwijderd schreef op 19 september 2002 @ 19:11:

[...]

Ik stelde ook ooit eens een dergelijke vraag, en toen kreeg ik als antwoord van tomato, dat ik maar eens naar het boek "Mastering Regular Expressions" moest kijken, van E.F. Friedl (gepubliceerd door O'Reilly & Associates).

Ik heb dat boek aangeschaft, en voor het grootste deel gelezen, en ben nog steeds erg tevreden met die tip van tomato :)
Ik heb hier de howto's liggen, maar ik kom er nog niet uit. En jij hebt veel ervaring. Weet jij misschien wat er fout is aan mijn laatst geposte code?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Slagroom schreef op 19 september 2002 @ 19:25:
Ik heb hier de howto's liggen, maar ik kom er nog niet uit. En jij hebt veel ervaring. Weet jij misschien wat er fout is aan mijn laatst geposte code?
Je gebruikt enkele aanhalingstekens voor je string, dan hoef je " natuurlijk niet te escapen.

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Slagroom
Ik heb hier de howto's liggen, maar ik kom er nog niet uit. En jij hebt veel ervaring. Weet jij misschien wat er fout is aan mijn laatst geposte code?
Mag ik het ook proberen? :)

Een \n tusssen enkele (') komma's wordt letterlijk opgevat. Gebruik dus quotes (") of definieer een newline char als constante o.i.d.

This can no longer be ignored.


  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 23-08 10:29
Erik Jan schreef op 19 september 2002 @ 23:22:
[...]

Mag ik het ook proberen? :)

Een \n tusssen enkele (') komma's wordt letterlijk opgevat. Gebruik dus quotes (") of definieer een newline char als constante o.i.d.
Dit was hem! Bedankt!
Pagina: 1