“@”符号有时用于包围PHP正则表达式吗?我正在使用代码库并找到此函数调用:
$content = preg_replace("@(</?[^>]*>)+@", "", $content);
我相信它会删除字符串中的所有XML标记,但我不确定那里的“@”符号是什么意思。
答案 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);
?>