我目前的正则表达式为/[$]([a-zA-Z0-9_\-\,:]*)[$]/
,这样我就可以为CMS替换以下字符串:
$ContentArea1$
$blog:PostTitle$
然而,当我们的内容以美元preg_replace
的价格摆脱价格的第一部分时,例如$15 $1 $2 etc
如何让preg_replace
忽略内容中的价格?
<?
$message = 'Below is an example for the content replacement<br/><br/><br/>$ContentArea1$';
$newMessage = '<h2>Website Coming soon</h2>
<p>
Are new website will be online soon.</p>
<p>
Price: $2.50</p>
<h2>
Twitter Feed</h2>
';
echo preg_replace('/[$]ContentArea1[$]/',$newMessage,$message);
?>
答案 0 :(得分:0)
您可以将正则表达式扩展为包含$
后跟数字,以便价格值中的$
不会终止:
/[$]((?:[a-zA-Z0-9_\-\,:]*)(?:[$]\d)?)+[$]/
答案 1 :(得分:0)
我不确定,如果我理解你的问题,但我有三种可能的解决方案:
更改正则表达式,使其仅匹配不以数字开头的变量:
[$]([a-zA-Z_\-\,:][a-zA-Z0-9_\-\,:]*)[$]
将其更改为仅匹配包含冒号的变量:
[$]([a-zA-Z0-9_\-\,]*:[a-zA-Z0-9_\-\,]*)[$]
您还可以使用函数preg_replace_callback
或/e
修饰符来调用仅替换有效变量名称的自定义PHP函数。
答案 2 :(得分:0)
我已经找到了如何允许$ 1.99显示在替换$ ContentArea1 $或我使用以下函数的任何其他变量的内容中。
function preg_replacement_quote($str) {
return preg_replace('/(\$|\\\\)(?=\d)/', '\\\\\1', $str);
}
$input = '$5 dollars';
$replacement = '$10+$5';
var_dump(preg_replace('|^(.*) dollars$|', preg_replacement_quote($replacement) . ' dollars', $input));
// output: string(14) "$10+$5 dollars"
现在允许我在内容中显示$符号。
来源:http://www.procata.com/blog/archives/2005/11/13/two-preg_replace-escaping-gotchas/
感谢您的所有答案和评论
答案 3 :(得分:0)
感谢您发布问题的基本示例,现在很清楚您的问题是什么:)
另一个简单的解决方案是使用str_replace
代替preg_replace
:
str_replace('$ContentArea1$', $newMessage, $message);