@(at)符号preg_replace函数

时间:2011-08-09 15:55:12

标签: php regex

“@”符号有时用于包围PHP正则表达式吗?我正在使用代码库并找到此函数调用:

$content = preg_replace("@(</?[^>]*>)+@", "", $content);

我相信它会删除字符串中的所有XML标记,但我不确定那里的“@”符号是什么意思。

4 个答案:

答案 0 :(得分:6)

是的,它可以用来包装表达式。原作者最有可能这样做,因为一些(或几个)表达式包含“更传统的”/分隔符。使用@,您现在可以使用/而无需转义它。

您可以使用:

  • /pattern/flags(传统)
  • @pattern@flags
  • $pattern$flags

答案 1 :(得分:2)

手册将其称为PCRE "delimiters"。可以使用任何ASCII符号(非字母数字)(空字节除外)。

/的常见替代方案是~#。但@同样有效。

PCRE还允许使用(...)<...>等大括号作为正则表达式。

答案 2 :(得分:1)

您可以在PHP正则表达式中使用几乎任何标点字符作为分隔符。 See the docs here。通常,/是第一选择(我建议在这里使用它),但如果正则表达式包含斜杠,则可以使用不同的字符。

大多数情况下,我看过%...%~...~#...#,但@...@也可以。

答案 3 :(得分:1)

简短的回答是肯定的。使用的具体符号并不重要;它通常应该是模式中不出现的东西。例如,这些都是等价的:

<?php
    preg_replace("@(<\?[^>]*>)+@", "", $content);
    preg_replace("/(<\?[^>]*>)+/", "", $content);
    preg_replace("!(<\?[^>]*>)+!", "", $content);  
?>

符号必要的原因是因为可以在表达式之后添加修饰符。例如,要搜索不区分大小写,可以使用:

<?php
   preg_replace("@(<\?[^>]*>)+@i", "", $content);
?>