Toon posts:

[PHP] ereg: elk karakter inclusief newline

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik ben bezig met de content formatting voor een website, en wou een tag toevoegen voor code.

zoals (zonder de spaties)
[ code ]blaat1
blaat2
blaat3[ /code ]

nu heb ik gelezen dat een punt (.) elk karakter voorstelt, maar niet de newline. Hoe moet ik de newline toch laten meetellen?

ik wil dus iets hebben van
code:
1
$aText = eregi_replace("\[codee](.+)\[/codee]","<font face=\"courier new,courier,monospace\">\\1</font>",$aText);

maar die nieuwe regels moeten erin passen...

nog een vraagje: via de search zag ik dat mensen ".*?" gebruikten, waarom niet gewoon ".*" ? Wat doet dat vraagteken extra?

Verwijderd

als je ook newlines erbij wilt hebben kun je gewoon (.*) gebruiken.

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op zaterdag 22 december 2001 22:18 schreef YaZe het volgende:
als je ook newlines erbij wilt hebben kun je gewoon (.*) gebruiken.
:?

* is een quantifier en het betekent 0 of meer (+ is 1 of meer), dat heeft er dus niets mee te maken.

met (.|\n) kun je alles inclusief newline matchen.

als je preg_replace gebruikt ipv ereg kun je een modifier gebruiken waardoor . ook newline matcht. volgens mij was het /g.

Verwijderd

Topicstarter
Op zaterdag 22 december 2001 22:27 schreef marcusk het volgende:

[..]

:?

* is een quantifier en het betekent 0 of meer (+ is 1 of meer), dat heeft er dus niets mee te maken.

met (.|\n) kun je alles inclusief newline matchen.

als je preg_replace gebruikt ipv ereg kun je een modifier gebruiken waardoor . ook newline matcht. volgens mij was het /g.
om meerdere occurences te kunnen gebruiken, is het dan
(.+|\n+)
of
(.|\n+)
of nog iets anders?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op zaterdag 22 december 2001 22:05 schreef Jppr het volgende:
nog een vraagje: via de search zag ik dat mensen ".*?" gebruikten, waarom niet gewoon ".*" ? Wat doet dat vraagteken extra?
normaalgesproken zijn * en + 'greedy', dat wil zeggen, ze matchen zoveel ze kunnen. met ? erachter kun je ze lazy maken (ungreedy). een voorbeeld:
code:
1
2
3
4
5
ereg_replace("\\[b\](.+)\\[/b\]", "<b>\\1</b>, "bla [b]bla bla[/b] bla [b]bla bla[/b] bla");
// dit geeft "bla <b>bla bla[/b] bla [b]bla bla</b> bla"

ereg_replace("\\[b\](.+?)\\[/b\]", "<b>\\1</b>, "bla [b]bla bla[/b] bla [b]bla bla[/b] bla");
// dit geeft "bla <b>bla bla</b> bla <b>bla bla</b> bla"

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op zaterdag 22 december 2001 22:33 schreef Jppr het volgende:
om meerdere occurences te kunnen gebruiken, is het dan
(.+|\n+)
of
(.|\n+)
of nog iets anders?
nog iets anders :) :

(.|\n)+

[edit]
die eerste kan ook wel

Verwijderd

Topicstarter
Op zaterdag 22 december 2001 22:37 schreef marcusk het volgende:

[..]

nog iets anders :) :

(.|\n)+

[edit]
die eerste kan ook wel
om daarna dat stukje binnen de haakjes te kunnen gebruiken met \\1, moet er dan nog extra haakjes rond? dus ((.|\n)+) of niet?

[edit] kan ik dan ook ((.|\n)+?) gebruiken om het ungreedy te maken?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
ik schreef:
[edit]die eerste kan ook wel
dat klopt niet, want dan match je of alleen newlines, of alle andere tekens, das niet de bedoeling lijkt me ;)
Op zaterdag 22 december 2001 22:44 schreef Jppr het volgende:
om daarna dat stukje binnen de haakjes te kunnen gebruiken met \\1, moet er dan nog extra haakjes rond? dus ((.|\n)+) of niet?
jep
[edit] kan ik dan ook ((.|\n)+?) gebruiken om het ungreedy te maken?
jep

Verwijderd

Topicstarter
Op zaterdag 22 december 2001 22:56 schreef marcusk het volgende:

[..]

dat klopt niet, want dan match je of alleen newlines, of alle andere tekens, das niet de bedoeling lijkt me ;)
een OR operator betekent toch: óf het ene, óf het andere, óf allebei? In logica is dat toch zo...

Verwijderd

Topicstarter
ivm die (.+?) : ik heb het net geprobeerd, en ik krijg
"Warning: REG_BADRPT: in D:\PixelCoders/article.php on line 68"

die lijn 68 bevat dan zo .+? (ook voor .*?). als ik dat vraagteken weglaat is de error ook weg... waarom lukt het niet?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op zaterdag 22 december 2001 23:07 schreef Jppr het volgende:
een OR operator betekent toch: óf het ene, óf het andere, óf allebei? In logica is dat toch zo...
regexen != logica :+
Op zaterdag 22 december 2001 23:26 schreef Jppr het volgende:
ivm die (.+?) : ik heb het net geprobeerd, en ik krijg
"Warning: REG_BADRPT: in D:\PixelCoders/article.php on line 68"

die lijn 68 bevat dan zo .+? (ook voor .*?). als ik dat vraagteken weglaat is de error ook weg... waarom lukt het niet?
werkt niet met ereg_* blijkbaar? ik gebruik altijd de preg_* functies. zie preg_replace. jouw regex wordt dan:
code:
1
$aText = preg_replace("_\\[codee\](.+?)\\[/codee\]_ig","<font face=\"courier new,courier,monospace\">\\1</font>",$aText);

hoef je dat ((.|\n)+) gedoe ook niet meer te gebruiken

Verwijderd

Topicstarter
wat zijn de voordelen van preg tov ereg? Waarom zijn er verschillende regular expressions dan?

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Ereg is minder geavanceerd. Het is mij ook niet helemaal duidelijk waarom het nog steeds meegecompileerd wordt. Preg is bij mij ook sneller (op een complexe benchmark, ik heb geen eenvoudige geprobeerd)

Preg gebruikt de PCRE, oftewel de PERL COMPATIBLE REGEXP ENGINE. Die lijkt behoorlijk op perl.
Ereg gebruikt een POSIX standaard. Die is dus wat algemener.

De meeste Ereg expressies zijn (met toevoeging van haakjes en wat geëscape) in Preg te gebruiken.

Localhost, sweet localhost

Pagina: 1