PHP preg_replace被管道包围?

时间:2013-04-16 04:13:37

标签: php regex preg-replace pcre

我刚刚在WordPress核心中遇到一个正则表达式,这引起了我的兴趣...... 我之前找到了这样的正则表达式,并对它们感到好奇,但它们已经有效,所以我没有改变它们。我感兴趣的部分如下:

|(?<!%)%f||(?<!%)(%s)| - 请注意它们是如何被管道包围而不是正斜杠?

我做了一些搜索,无法找出表达式中的这些变化?我知道在表达中他们几乎就像or - 我明白了。但是取代正斜线?

有人可以解释一下这里发生了什么吗? 我唯一的想法是以下几点......

|(?<!%)意味着什么都没有,或者说是前瞻。

(%s)|表示(%s)或没有......

这是典型的管道。然而正如我所说的,我之前已经看过它而不是前向斜线,所以我不确定这是PCRE的某些未记录的功能还是类似的东西?

修改

如果您有管道,则不需要正斜杠。如果您没有管道,则会出现正则表达式语法错误。

2 个答案:

答案 0 :(得分:1)

它们只是PCRE样式REGEX的不同分隔符...我自己使用感叹号。

管道是分界线,而你习惯的是斜线。

!^[A-Z]+$!i - 所有字母字符不区分大小写。

更多关于分隔符的信息: http://www.php.net/manual/en/regexp.reference.delimiters.php

请注意,他们在示例和#符号中使用了%个字符。

答案 1 :(得分:0)

没有发生任何事情,管道可以用作代替/的模式的分隔符,例如~#@,...