我在字符串中有一个带有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”?
答案 0 :(得分:2)
以下正则表达式将匹配[blah](http://blah.blah)
格式的字符串。第一个[]
大括号内的字符被捕获到组1中,下一个()
大括号内的字符被捕获到组2.稍后,组1和组2中的字符串通过反向引用(即,使用\1
或\2
)
<强>正则表达式:强>
\[([^]]*)\]\(([^)]*)\)
替换字符串:
<a href="\2">\1</a>
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