[php] regexp whitespace varianten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Waarschuwing: deze vraag bevat een hoog newbie-gehalte.

Na veel aankloten met verschillende tutorials over regex blijf ik zitten met de volgende vraag. Het gaat over het verwijderen van whitespace binnen een string. Ik gebruik
PHP:
1
echo eregi_replace ($pattern,"",$text);

om uit $text de whitespace te halen. Qua patterns heb ik de volgende zaken gebruikt:

Succesvol (varianten op hetvolgende) :) :
PHP:
1
2
$pattern = " *";
$pattern = "( *)|(\n*)";


Niet succesvol (de tekst blijft onveranderd) :( :
PHP:
1
2
3
4
5
6
$pattern = "'([\r\n])[\s]+'"; 
$pattern = "/ +/";
$pattern = "\s{2,}/";
$pattern = "/\s{2,}/";
$pattern = "(\s)*";
$pattern = "\s*";


Nu weet ik dat het ook mogelijk moet zijn om het via een van de onderste methoden te doen, en ik verbaas me er zeer over dat ik dit niet werkend krijg, aangezien ik sommige hiervan ook letterlijk hier op het forum heb zien staan. Anderen heb ik zelf verzonnen. Ik verbaas me er vooral over dat de laatste twee geen effect hebben. 8)7

Zou iemand mij op mijn newbie fout kunnen wijzen? _/-\o_

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Probeer
code:
1
/\s+/g

eens :)

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 19-09 09:59
Zet er dan even bij dat de TS even moet zoeken naar 'greedy' of 'greedyness', dan weet hij meteen wat er fout zit/zat :).

zeroxcool.net - curity.eu


Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Hmm, had inderdaad wel een idee geweest ;)

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik zal direct zoeken naar greedyness... dank voor de tip, zit al uren te klooien.

Wat ik nergens tegen kom, is waar die eerste slash voor staat die je daar gebruikt (het eerste teken in je code). En waarom sommige regex'en tussen twee van die slashes staan... bv "\aap\" ipv "aap".

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Dat zijn pcre-regexpen. Ik krijg wat jij wilt trouwens niet aan de praat met eregi_replace(). Wel met
PHP:
1
2
3
  echo preg_replace("/\s+/", "", $line);
  # en nu ook met
  echo ereg_replace(" +", "", $line); # maar deze doet alleen spaties.

[ Voor 28% gewijzigd door CyBeR op 31-01-2005 01:12 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
$pattern = "/\s+/g";

Geeft geen resultaat. M'n string blijft onveranderd :?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
CyBeR schreef op maandag 31 januari 2005 @ 01:10:
Dat zijn pcre-regexpen. Ik krijg wat jij wilt trouwens niet aan de praat met eregi_replace(). Wel met
PHP:
1
2
3
  echo preg_replace("/\s+/", "", $line);
  # en nu ook met
  echo ereg_replace(" +", "", $line); # maar deze doet alleen spaties.
Ja klopt.. die losse spaties lukte mij ook al.

edit:
wat hier stond is niet meer relevant

[ Voor 19% gewijzigd door Verwijderd op 31-01-2005 01:18 ]


Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Verwijderd schreef op maandag 31 januari 2005 @ 01:11:
[...]

PHP:
1
$pattern = "/\s+/g";

Geeft geen resultaat. M'n string blijft onveranderd :?
Als er een s in zit zal die ws. kwijt zijn. De php regexp engine werkt heel anders, blijkbaar. Ik gebruik zelf liefst de perl regexp librari (preg_foo()).
Verwijderd schreef op maandag 31 januari 2005 @ 01:15:
[...]

Ja klopt.. die losse spaties lukte mij ook al.

Die preg replace die je geeft, geeft mij de volgende error:
Warning: Unknown modifier 'g'
Die heb ik in mijn preg_replace() weggehaald ;) Overigens gaat 't niet over greedyness (dat zijn regexpen standaard) maar over een global replace. Dat is bij de normale perl regexpen niet standaard maar bij php blijkbaar wel, dus werkt die optie niet.

[ Voor 43% gewijzigd door CyBeR op 31-01-2005 01:17 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dank je.. die laatste werkt :) :
PHP:
1
2
$pattern = "/\s+/";
echo preg_replace ($pattern,"",$text);


Ookal moet ik nog even opzoeken wat nou precies het verschil daarmee is met degene die ik al eerder gaf en die niet werkte:

PHP:
1
2
$pattern = "\s*";
echo eregi_replace ($pattern,"",$text);


edit:
ik gebruikte eregi ipv preg (had ik fout van mezelf gequote)

[ Voor 19% gewijzigd door Verwijderd op 31-01-2005 01:26 ]


Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Verwijderd schreef op maandag 31 januari 2005 @ 01:22:


Ookal moet ik nog even opzoeken wat nou precies het verschil daarmee is met degene die ik al eerder gaf en die niet werkte:

PHP:
1
2
$pattern = "\s*";
echo preg_replace ($pattern,"",$text);
Simpel. preg_foo() wil een Perl-Compatible Regular Expression (PCRE). Perl regexps worden aangegeven met een delimiter, meestal een /. Dus de regexp (\s*) heeft die delimiter er omheen (/\s*/). Die werkt prima met preg_replace() maar niet met ereg_replace. Ereg_replace() wil die delimiters niet hebben (dus zou je \s* weer overhouden) maar ziet bovendien \s niet als een speciale character maar gewoon als een ge-escapete s. Doe maar eens eregi_replace("\s*", "", "test"); en de s is weg.

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
CyBeR schreef op maandag 31 januari 2005 @ 01:29:
[...]


Simpel. preg_foo() wil een Perl-Compatible Regular Expression (PCRE). Perl regexps worden aangegeven met een delimiter, meestal een /. Dus de regexp (\s*) heeft die delimiter er omheen (/\s*/). Die werkt prima met preg_replace() maar niet met ereg_replace. Ereg_replace() wil die delimiters niet hebben (dus zou je \s* weer overhouden) maar ziet bovendien \s niet als een speciale character maar gewoon als een ge-escapete s. Doe maar eens eregi_replace("\s*", "", "test"); en de s is weg.
Dank je. Dat is erg duidelijk. _/-\o_
Daarnaast lijkt het dat je me aanraad verder te werken met preg_foo. Dat denk ik dan ook maar te gaan doen.
Nog een laatste dingetje over ereg_replace. Die ziet \s dus niet als een speciaal karakter. Is er wel een andere manier om dat speciale teken in ereg_replace te stoppen? Want misschien wil ik die in de toekomst een keer gebruiken als ik case insensitive wil zoeken (toch?).

edit:
zoeken naar php en preg_foo in google geeft me 1 hit...

[ Voor 6% gewijzigd door Verwijderd op 31-01-2005 01:38 ]


Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

haha, preg_foo() is ook geen functie, maar een manier om te zeggen preg_blahblabla() :P

Case insensitive zoeken kan met de preg_blabla() functies ook, door een i achter de achterste delimiter te zetten. Hoe je spaties aangeeft in de ereg_foo() functies weet ik niet, ik gebruik altijd preg_foo() omdat ik perl regexp beter ken :)

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
CyBeR schreef op maandag 31 januari 2005 @ 01:44:
haha, preg_foo() is ook geen functie, maar een manier om te zeggen preg_blahblabla() :P

Case insensitive zoeken kan met de preg_blabla() functies ook, door een i achter de achterste delimiter te zetten. Hoe je spaties aangeeft in de ereg_foo() functies weet ik niet, ik gebruik altijd preg_foo() omdat ik perl regexp beter ken :)
Hahahahaha.. :) wat een grap. Cyber je bent m'n held. Wat mij betreft is dit topic dan wel weer af.
Pagina: 1