[PHP] preg_replace: vervangen indien aanwezig

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • f.heinen
  • Registratie: Februari 2005
  • Laatst online: 06-02 22:23
Ik heb een willekeurige string. Indien in deze de karakters [xxx] voorkomen (waarbij xxx voor een decimaal getal staat) vervangen door xxx.

Voorbeeld:

Product[1] en product[123412] is goed.

moet worden:

Product_1 en product_123412 is goed.

Ik heb het voor elkaar voor de string met aan het einde [xxx]. Dit is:
preg_replace('/(.*)\[(.*)]/', '$1_$2', $string)

Volgens mij moet dit simpel zijn maar ik zie het even niet meer....

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Kan met een eenvoudige str_replace :

PHP:
1
2
$string = str_replace('[', '_', $string);
$string = str_replace(']', '', $string);

[ Voor 4% gewijzigd door XWB op 03-09-2006 21:10 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • f.heinen
  • Registratie: Februari 2005
  • Laatst online: 06-02 22:23
Klopt maar ik wou een keer het systeem van preg_replace/reggex leren kennen. Dus vandaar dat ik dit graag wil oplossen met preg_replace.

Plus het feit dat dat systeem niet onder alle omstandig heden werkt. Deze haalt alle '[' en alle ']' weg. Nu werkt die van mij ook nog niet veel anders (geen decimale karakter check tussen [ en ]) maar dat is nog te maken.

Acties:
  • 0 Henk 'm!

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
Heel basaal zou dit de juiste oplossing zijn:

PHP:
1
$foo = preg_replace ( '!\[([0-9]+)\]!', '_$1', $bar );

[ Voor 3% gewijzigd door MarkvE op 03-09-2006 21:33 ]

Vormkracht10


Acties:
  • 0 Henk 'm!

  • f.heinen
  • Registratie: Februari 2005
  • Laatst online: 06-02 22:23
Geweldig dat werkt. Ik moet eens gaan kijken wat die ! betekent.

Weet iemand nog een goede en makkelijk te lezen van preg_replace/reggex? Ik heb er genoeg gevonden maar allemaal of zeer taaie ondoorzichtelijke korst of hele opervlakkige tuts.

Acties:
  • 0 Henk 'm!

  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05 17:51
www.regexp.info is een goede site. Het gaat over regexp in het algemeen, maar er staan wel voorbeelden in icm php.

Acties:
  • 0 Henk 'm!

  • DemonTPx
  • Registratie: December 2002
  • Laatst online: 09-04 10:49
MarkvE schreef op zondag 03 september 2006 @ 21:33:
Heel basaal zou dit de juiste oplossing zijn:

PHP:
1
$foo = preg_replace ( '!\[([0-9]+)\]!', '_$1', $bar );
Je kan in plaats van [0-9] natuurlijk ook \d gebruiken om een decimaal aan te duiden :)

Acties:
  • 0 Henk 'm!

  • Tepel
  • Registratie: Juni 2006
  • Laatst online: 17-08-2024
f.heinen schreef op zondag 03 september 2006 @ 21:38:
Geweldig dat werkt. Ik moet eens gaan kijken wat die ! betekent.

Weet iemand nog een goede en makkelijk te lezen van preg_replace/reggex? Ik heb er genoeg gevonden maar allemaal of zeer taaie ondoorzichtelijke korst of hele opervlakkige tuts.
het uitroepteken is in dit geval de aangever van het begin en eind van de regexp. Standaard wordt een "/" gebruikt. Maar soms is het wenselijk om een ander karakter te gebruiken ivm het escapen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$foo = preg_replace ( '!\[([0-9]+)\]!', '_$1', $bar );

// is dus gelijk aan:
$foo = preg_replace ( '/\[([0-9]+)\]/', '_$1', $bar );

// of:
$foo = preg_replace ( '#\[([0-9]+)\]#', '_$1', $bar );

// of:
$foo = preg_replace ( '/\[(\d+)\]/', '_$1', $bar );
?>

Het is maar net wat je het makkelijkste vindt. Ik zelf pak altijd de standaard "/"
voor meer info over PCRE:
http://nl2.php.net/manual...e.pcre.pattern.syntax.php

[ Voor 4% gewijzigd door Tepel op 04-09-2006 11:53 ]

0x7F

Pagina: 1