PHP:正则表达式中的剩余文本

时间:2012-11-29 21:51:14

标签: php regex

尝试编写一个脚本,用户输入[link](http://www.example.com)并获取一个名为“link”的超链接,其中包含“http://www.example.com”作为href 。这是我的代码:

if(preg_match("/\[[a-zA-Z0-9]*\]([a-zA-Z0-9]*)/", $input))
{
    $input = preg_replace("/\[([a-zA-Z0-0-9]*)\](([a-zA-Z0-9]*))/", "<a href='$2'>$1</a>", $input);
}

我一直在追回的是[link](http://www.example.com)(http://www.example.com)。知道我做错了吗?

1 个答案:

答案 0 :(得分:1)

你忘了逃避字面括号(因此(([a-zA-Z0-9]*))部分只是匹配空字符串)。

此外,如果你想匹配链接,你需要至少允许斜线,冒号和点:

$input = preg_replace("%\[([A-Z0-9]*)\]\(([A-Z0-9/:.]*)\)%i", "<a href='$2'>$1</a>", $input);

或可能

$input = preg_replace("%\[([A-Z0-9]*)\]\((https?://[A-Z0-9/.]*)\)%i", "<a href='$2'>$1</a>", $input);