PHP Regex@vs/

PHP Regex@vs/,php,regex,Php,Regex,我注意到一些用户在PHP正则表达式中使用@vs/,这两者之间有区别吗?我假设在字符串中处理“/”是用户的首选项 $body = preg_replace("@<script[^>]*>.+</script[^>]*>@si", "", $body); $body=preg_replace(“@]*>.+]*>@si”,”,“,$body); vs $body=preg_replace(“/]*>.+]*>/si”,”,“,$body); 使用/会使将/放入

我注意到一些用户在PHP正则表达式中使用@vs/,这两者之间有区别吗?我假设在字符串中处理“/”是用户的首选项

$body = preg_replace("@<script[^>]*>.+</script[^>]*>@si", "", $body);
$body=preg_replace(“@]*>.+]*>@si”,”,“,$body);
vs

$body=preg_replace(“/]*>.+]*>/si”,”,“,$body);

使用
/
会使将
/
放入正则表达式或替换项变得更加困难。使用
@
会使将
@
放入正则表达式或替换项变得更加困难。除此之外,没有区别。

根据

分隔符可以是任何非字母数字、非反斜杠、非空白 性格

因此,使用斜杠或
@
#
基本上没有区别。但是请记住,所选分隔符不能出现在正则表达式本身中,否则需要转义该字符

提示:由于PCRE允许
任何非字母数字、非反斜杠、非空白的
作为分隔符,因此当您无法预测正在使用的正则表达式的内容时,有时最好使用控制字符作为分隔符。请参见以下示例:

$repl = preg_replace('^K^foo^K', 'bar', 'foo.txt' );

在这里,此代码使用的是一个控制字符
^K
(在shell上键入为
ctrl-V-K

没有区别,只是习惯于您是正确的。这两个都是正则表达式的有效分隔符。@people试图避免使用@AndyLester,我不会这么说。在我的例子中,我已经使用MongoDB来存储正则表达式了,所以我的牙签有时有3-4层,使用@可以节省我很多额外的字符。旁注:
无法预测regex的内容
->你主要应该使用
preg_quote()
@HamZa:顺便说一句,完全同意,解释分隔符的不是PCRE,而是PHP本身:请参阅@IMSoP:Thank,这非常有趣
$repl = preg_replace('^K^foo^K', 'bar', 'foo.txt' );