查找并替换字符串中的Stack Overflow样式链接

时间:2014-08-20 00:23:35

标签: php html regex string

我在字符串中有一个带有Stack Overflow样式链接的用户输入字符串,如下所示:

The input string [foo](http://foo.com) with a link.

我需要将字符串转换为包含这样的锚标记:

The input string <a href="http://foo.com">foo</a> with a link.

到目前为止,我已经(参考:PHP: Best way to extract text within parenthesis?):

$text = 'ignore everything except this (text)';
preg_match('#\((.*?)\)#', $text, $match);
print $match[1];

但我需要找到一种方法来匹配括号内的元素和括号内的元素。最后,用正确格式化的锚标记替换整个匹配的部分。

是否有人知道匹配[foo](http://foo.com)的正确正则表达式语法以及如何提取“foo”和“http://foo.com”?

1 个答案:

答案 0 :(得分:2)

以下正则表达式将匹配[blah](http://blah.blah)格式的字符串。第一个[]大括号内的字符被捕获到组1中,下一个()大括号内的字符被捕获到组2.稍后,组1和组2中的字符串通过反向引用(即,使用\1\2

回忆它

<强>正则表达式:

\[([^]]*)\]\(([^)]*)\)

替换字符串:

<a href="\2">\1</a>

DEMO

PHP代码将是,

<?php
$mystring = "The input string [foo](http://foo.com) with a link";
echo preg_replace('~\[([^]]*)\]\(([^)]*)\)~', '<a href="\2">\1</a>', $mystring);
?> 

<强>输出:

The input string <a href="http://foo.com">foo</a> with a link