什么分隔符用于PHP中的preg_replace(替换PHP以外的工作但不在内部工作)

Pau*_*ops 2 php regex preg-replace

我自己和我的团队都坚持这个,我有以下代码.

$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/file/imgs/$1" width="$2px" />';
$text = preg_replace($pat , $mat, $text);
Run Code Online (Sandbox Code Playgroud)

我们想要做的是转换[[ imagefile || size ]]使用$ mat中的结构进入图像标签.这场比赛在RegExr(adobe air program)和verious javascript在线测试人员中完美运行

我得到的错误是: -

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

所以,如果我添加一个稀释剂,如...

$ pat ="^ [[(.)\ |\|(.)]] ^";

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

任何帮助真的很感激.

Tom*_*lak 11

preg_replace() 需要一个分隔符:

preg_replace("/$pat/" ...
Run Code Online (Sandbox Code Playgroud)

传统上它是正斜杠,但它可以是任何角色 - 特别是当你需要正则表达式中的正斜杠时,你可以诉诸另一个角色.

这种灵活性允许你表达"/http:\/\/foo\/bar\//"("倾斜牙签综合症")"!http://foo/bar/!".

分隔符是将正则表达式与正则表达式标志(也称为"修饰符")分开所必需的,例如:

preg_replace("/$pat/i" ...
Run Code Online (Sandbox Code Playgroud)

...这使用该i标志来声明不区分大小写的正则表达式.


Gum*_*mbo 5

从PCRE分隔符的PHP手册:

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

经常使用的分隔符是正斜杠(/),哈希符号(#)和波浪号(~).

因此,您可以使用/分隔符将模式与可选修饰符分开:

/\[\[(.*)\|\|(.*)\]\]/
Run Code Online (Sandbox Code Playgroud)

但也请注意:

除了上述分隔符之外,还可以使用括号样式分隔符,其中开始和结束括号分别是起始和结束分隔符.

此外,目前你的模式将尽可能匹配,因为两个量词都是贪婪的; 您可能希望将它们更改为不愿意尽可能少地匹配:

/\[\[(.*?)\|\|(.*?)\]\]/
Run Code Online (Sandbox Code Playgroud)