Jump to content

Archived

This topic is now archived and is closed to further replies.

hvle

preg_replace

Recommended Posts

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

Share this post


Link to post
Share on other sites
the '$' symbol is a special character when working with Regular Expressions - Escape it and you should be fine.
[code]<?php
$val1 = "{BODY}";
$val2 = '\$453.00';

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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
From the manual:

[quote]
Replacement may contain references of the form \\n or (since PHP 4.0.4) [b]$n[/b], with the latter form being the preferred one. Every such reference will be replaced by the text captured by the n'th parenthesized pattern. [b]n can be from 0 to 99[/b], 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.
[/quote]

Thus, your replace was looking for backreference $45.

Share this post


Link to post
Share on other sites
Thank you effigy, good to know.

Share this post


Link to post
Share on other sites

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.