2

ユーザーが[link](http://www.example.com)を入力し、hrefとして「http://www.example.com」を含む「link」という名前のハイパーリンクを取得するスクリプトを作成しようとしています。これが私のコードです:

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 に答える