PHP Regex@vs/
我注意到一些用户在PHP正则表达式中使用@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); 使用/会使将/放入
$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' );