我正在为项目创建自定义降价,并且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字符,据我所知,我自己的代码中,期间不匹配,例如阿拉伯语。我的大多数段落都是阿拉伯语。这是我无法匹敌的样本:
[[عـى أن سـليان هـو وراء نظـم هـذا السـفر [بإلهـام مـن اللـه] فحسـب لكنـه يظهـر]]
答案 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);
答案 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而不是。它有效。