reguliere expressie perl

Pagina: 1
Acties:

  • Trax_Digitizer
  • Registratie: Januari 2002
  • Laatst online: 11-05 10:40

Trax_Digitizer

are we there yet?

Topicstarter
ik heb de volgende reguliere expressie:

s/(\s+)//g;

die zorgt ervoor dat alle spaties uit een string worden gehaald dus ook degene die IN de string staan!!!
wat ik wil is een reg expressie die alleen de spaties aan de buitenkant van de string weg haalt, maar dit wil niet zo zeer lukken. Iemand een suggestie?

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

zoiets :?
$var =~ s/^\s+//; # verwijder spaties aan het begin
$var =~ s/\s+$//; # verwijder spaties aan het eind

Today's subliminal thought is:


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

heb je idd geen regex voor nodig, je kunt de functie 'chop' gebruiken.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:43
Je kunt het probleem op twee manieren aanpakken.

De eerste, alle spaties aan 't begin en 't eind van de tekst weghalen is al genoemd.

Als alternatief zou je ook de tekst kunnen selecteren dat omsloten wordt door spaties. Dat zou zoiets worden:
code:
1
  ($tekst) = ($invoer =~ /^ *(.*[^ ]) *$/)

Als de invoer uit uitsluitend spaties bestaat, faalt deze reguliere expressie echter (omdat [^ ] niet gematched kan worden). Hou daar dus rekening mee.

edit:
Het is eigenlijk netter om in plaats van 'echte' spaties character class specificiers als \s te gebruiken.

  • Juup
  • Registratie: Februari 2000
  • Niet online
Annie d'r oplossing werkt maar het kan ook in 1 regexp:
code:
1
my $string =~ s/^\s*(.*?)\s*$/$1/;

voila

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:43
Op vrijdag 31 mei 2002 10:50 schreef Jaaap het volgende:
Annie d'r oplossing werkt maar het kan ook in 1 regexp:
code:
1
my $string =~ s/^\s*(.*?)\s*$/$1/;
Waarom substituten en niet gewoon matchen? Verder vind ik de non-greedy match '*?' wel mooier dan mijn suggestie, hoewel die niet POSIX compliant is (hoefde ook niet natuurlijk).

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Soultaker:
Het is eigenlijk netter om in plaats van 'echte' spaties character class specificiers als \s te gebruiken.
In dat geval doe je de aanname dat je alle whitespace characters wilt verwijderen (dus ook \n, \r, \t ...). Het is maar net wat de regex beschrijft. Er is niets mis met een gewone spatie te gebruiken in een regex.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • tomato
  • Registratie: November 1999
  • Niet online
Met een regex zou ik het zo doen:
code:
1
s/^\s+|\s+$//g

Maar natuurlijk kun je net zo goed chomp gebruiken :)

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Op vrijdag 31 mei 2002 12:29 schreef tomato het volgende:
Maar natuurlijk kun je net zo goed chomp gebruiken :)
ik ga me nu in de gevarenzone begeven ;) (ben perl-n00b), maar pakt chomp niet alleen het einde van de string en pakt deze niet standaard alleen newlines ipv spaties?

Today's subliminal thought is:


  • tomato
  • Registratie: November 1999
  • Niet online
Annie: maar pakt chomp niet alleen het einde van de string
Ja je hebt gelijk :o
en pakt deze niet standaard alleen newlines ipv spaties?
Standaard inderdaad, maar dat kun je dus zelf bepalen ;)
Pagina: 1