hvle Posted August 7, 2006 Share Posted August 7, 2006 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 Quote Link to comment Share on other sites More sharing options...
zq29 Posted August 7, 2006 Share Posted August 7, 2006 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] Quote Link to comment Share on other sites More sharing options...
hvle Posted August 9, 2006 Author Share Posted August 9, 2006 that's right SA,but why $45 was stripped? why not $4 or $453i'm just curious.It was a bad idea to use preg_replace. I change to str_replace and it's better. Quote Link to comment Share on other sites More sharing options...
effigy Posted August 9, 2006 Share Posted August 9, 2006 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. Quote Link to comment Share on other sites More sharing options...
hvle Posted August 9, 2006 Author Share Posted August 9, 2006 Thank you effigy, good to know. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.