regexp replace einde string

Pagina: 1
Acties:

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Hoi

Ik ben veel bezig met RegExp en ik ben er opzich wel in thuis, maar met het volgende eufel zit ik elke keer weer, dus vraag ik het maar een keer.

$str = "40_100,40_200,40_300";

Gewenste uitkomst:
"100, 200, 300";

Mijn regexp:
preg_replace("/\d+_(\d+)[,|$]/", "$1,", $str);

Maar dan pakt ie de laatste niet. Ook niet als ik \Z doe oid

Hij moet dus of een komma, of het einde van de string matchen met [,|$] maar deze werkt dus niet, omdat deze dus het laatste karacter matchen, en niet echt "endofstring" zeg maar.

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23-09 21:37

Creepy

Tactical Espionage Splatterer

Waarom niet zonder regexp en de string splitten op de komma om vervolgens van elk deel alles na de _ te pakken (zou weer kunnen met een split op _). Geen regexp voor nodig en naar mijn idee een stuk leesbaarder.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • benoni
  • Registratie: November 2003
  • Niet online
Of als je de regexp goed wilt toepassen:
code:
1
\d+_(\d+)([,]|$)


Wat ik ook wel vaak doe voor dit soort gevallen is simpelweg een komma aan de tekst vastplakken ($str . ",") zodat de expressie simpeler wordt, sneller uitvoerbaar is O-)

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Al deze oplossingen weet ik al, maar ik vroeg me dus af of er ook een nette regexp voor is :)

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • benoni
  • Registratie: November 2003
  • Niet online
Die geef ik toch?

Oh wacht, het kan idd. netter, die [] om de komma zijn niet nodig :D
code:
1
\d+_(\d+)(,|$)

[ Voor 82% gewijzigd door benoni op 19-02-2009 11:17 ]


  • Guillome
  • Registratie: Januari 2001
  • Niet online
code:
1
"/\d+_(\d+)(,|$)/", "$1$2",
werkt inderdaad. Maar het oogt wat onlogisch

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • benoni
  • Registratie: November 2003
  • Niet online
Het tweede haakjespaar hoef je niet per sé terug te laten komen in de vervangtermen, dat haakjespaar zit in de expressie om de logische constructie te maken ( mogelijkheid 1 | mogelijkheid 2 ).

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Je ook gewoon de \d+_ vervangen door niets als je dat logischer vind. :+

{signature}


  • Guillome
  • Registratie: Januari 2001
  • Niet online
Nee want die moet er toch uit gereplaced worden?

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • benoni
  • Registratie: November 2003
  • Niet online
eruit replacen == vervangen door niets ;)

Pak eerst even een bakje koffie anders :P

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23-09 21:37

Creepy

Tactical Espionage Splatterer

benoni schreef op donderdag 19 februari 2009 @ 11:56:
eruit replacen == vervangen door niets ;)

Pak eerst even een bakje koffie anders :P
Wat mooi mijn punt weer aantoond dat een niet regexp variant waarschijnlijk leesbaarder is :P

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Guillome
  • Registratie: Januari 2001
  • Niet online
Oh zo :P Ik las het verkeerd, sorry haha.
Ik dacht dat je van
code:
1
"/\d+_(\d+)(,|$)/", "$1$2",

Dit wou maken
code:
1
"/(\d+)(,|$)/", "$1$2",

Maar je bedoelt:
code:
1
"/\d+_/", "",

:D

[ Voor 7% gewijzigd door Guillome op 19-02-2009 12:10 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Asus Tuf OC 3080, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router

Pagina: 1