在|之前和之后提取文本使用preg_replace

时间:2014-08-18 14:54:54

标签: php regex preg-replace

在我努力构建类似stackoverflows链接系统的东西时,我试图做这样的事情;

$raw = '[[path.html|Link description]]';

$str = preg_replace('#\[(\?)|(\?)]#', '<a href="$1">$2</a>', $raw);

echo $str;
//$str should not be <a href="path.html">Link description</a>

这应该有效,但我一直得到与输出相同的文字。我的想法是将部分放在|之前作为href,将|之后的部分作为链接描述。最后,我只是失败了。

我从一个woking的例子中得到了这个,但是在添加|部分后我被卡住了。

2 个答案:

答案 0 :(得分:1)

你的正则表达式的问题在于你没有逃过|所以你有OR表达。

您可以使用此正则表达式:

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

<强> Working demo

enter image description here

答案 1 :(得分:1)

逃脱管道:

$str = preg_replace('#\[(.+?)\|(.+?)\]#', '<a href="$1">$2</a>', $raw);

\?字面上是一个问号。像上面那样改变你的正则表达式。