Jump to content


Photo

preg_replace


  • Please log in to reply
4 replies to this topic

#1 hvle

hvle
  • Members
  • PipPipPip
  • Advanced Member
  • 667 posts
  • Locationmelbourne, Australia

Posted 07 August 2006 - 08:11 AM

strange behavior in preg_replace:

$val1 = "{BODY}";
$val2 = '$453.00;

now I want to replace '{BODY}' with $val2 so:

echo preg_replace('/{BODY}/',$val2,$val1);

will echo '3.00'
where is '$45' gone?

is this a bug or i am doing something wrong?

thanks

Life's too short for arguing.

#2 Kris

Kris
  • Staff Alumni
  • Advanced Member
  • 2,755 posts
  • LocationThe Internet

Posted 07 August 2006 - 10:21 AM

the '$' symbol is a special character when working with Regular Expressions - Escape it and you should be fine.
<?php
$val1 = "{BODY}";
$val2 = '\$453.00';

echo preg_replace('/{BODY}/',$val2,$val1);
?>


#3 hvle

hvle
  • Members
  • PipPipPip
  • Advanced Member
  • 667 posts
  • Locationmelbourne, Australia

Posted 09 August 2006 - 01:59 AM

that's right SA,
but why $45 was stripped? why not $4 or $453
i'm just curious.

It was a bad idea to use preg_replace.  I change to str_replace and it's better.
Life's too short for arguing.

#4 effigy

effigy
  • Staff Alumni
  • Advanced Member
  • 3,600 posts
  • LocationIL

Posted 09 August 2006 - 05:03 AM

From the manual:

Replacement may contain references of the form \\n or (since PHP 4.0.4) $n, with the latter form being the preferred one. Every such reference will be replaced by the text captured by the n'th parenthesized pattern. n can be from 0 to 99, and \\0 or $0 refers to the text matched by the whole pattern. Opening parentheses are counted from left to right (starting from 1) to obtain the number of the capturing subpattern.


Thus, your replace was looking for backreference $45.
Regexp | Unicode Article | Letter Database
/\A(e)?((1)?ff(?:(?:ig)?y)?|f(?:ig)?)\z/

#5 hvle

hvle
  • Members
  • PipPipPip
  • Advanced Member
  • 667 posts
  • Locationmelbourne, Australia

Posted 09 August 2006 - 01:04 PM

Thank you effigy, good to know.
Life's too short for arguing.




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users