为什么这个&符号匹配正则表达式不起作用?

时间:2011-01-15 16:54:01

标签: php regex drupal

我需要使用此PHP snippet&转换为&符号。我正在使用与Paul Dixon编写的完全相同的测试代码,但在我的代码中没有替换&符号。为什么?我使用的是PHP 5.2.6。

$str_fix = preg_replace('/&(?!#?[a-z0-9]+;)/', '&', $str);

以下,更简单但不正确(它还将替换&中的&)正则表达式:

$str_fix = preg_replace('/&/', '&', $str);
编辑:Damnit,问题不是regexp / PHP相关而是Drupal!是的,我在Drupal模块中使用此代码段,由于某种原因,Drupal会将&转换为&

3 个答案:

答案 0 :(得分:1)

如果Drupal用&替换&,你可以双重逃避实体:

$str_fix = preg_replace('/&(?!#?[a-z0-9]+;)/', '&', $str);

然后Drupal将输出&,这是您想要的结果。

答案 1 :(得分:0)

使用str_replace('&','& amp;',$ str)怎么样?

答案 2 :(得分:0)

你能给我们一个示例输入字符串吗?

echo preg_replace('/&(?!#?[a-z0-9]+;)/', '&', "Dogs & Cats & budgies\n");

正确生成

Dogs & Cats & budgies