正则表达式与自定义降价不匹配

时间:2014-12-17 04:56:35

标签: php regex

我正在为项目创建自定义降价,并且php一直挂在这样的段落上:

[[Test paragraph with an [insertion] here that throws off]]

通常,php命令

$file_contents = preg_replace('/\s(\[\[)([^\]]*)(\]\])/i','<div class="ui-body ui-body-a ui-corner-all">$2</div><br>',$file_contents);

[[your paragraph here]]中包含的任何内容周围放置一个漂亮的小方框,但如果在段落中放置],那么正则表达式永远不会完成匹配。

我已尝试过一段时间,但我需要匹配非ascii字符,据我所知,我自己的代码中,期间不匹配,例如阿拉伯语。我的大多数段落都是阿拉伯语。这是我无法匹敌的样本:

[[عـى أن سـليان هـو وراء نظـم هـذا السـفر [بإلهـام مـن اللـه] فحسـب لكنـه يظهـر]]

2 个答案:

答案 0 :(得分:1)

\X*?而不是第二个捕获组。\X匹配任意数量的Unicode字符,形成扩展的Unicode序列。

$file_contents = preg_replace('/\s(\[\[)(\X*?)(\]\])/iu','<div class="ui-body ui-body-a ui-corner-all">$2</div><br>',$file_contents);

OR

$file_contents = preg_replace('/\s(\[\[)((?:(?!\]\])\X)*)(\]\])/iu','<div class="ui-body ui-body-a ui-corner-all">$2</div><br>',$file_contents);

DEMO

答案 1 :(得分:-1)

$file_contents = preg_replace('/\s([[)((?:(?!]])\X)*)(]])/i','<div class="ui-body ui-body-a ui-corner-all">$2</div><br>',$file_contents);

终于做到了。根据php.net,\ X表示扩展的unicode表达式。我使用\ X而不是。它有效。