2

尝试编写一个脚本,其中用户输入 [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)。知道我做错了什么吗?

4

1 回答 1

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);
于 2012-11-29T21:55:48.873 回答