0

URL を適切な HTML リンクに置き換えるために、php 関数で次の正規表現を使用します。

return preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '<a href="$1" target="_blank">$1</a>', $s);

しかし、 $s の値が次のような文字列の場合

<li>http://www.link.com/something.pdf</li>

関数が返す

<li><a href="http://www.link.com/something.pdf</li">http://www.link.com/something.pdf</li></a></li>

正規表現を変更して意図した文字列を取得する方法を知っている人はいますか?

<li><a href="http://www.link.com/something.pdf">http://www.link.com/something.pdf</a></li> ?

「%」、「?」によって導入された URL の置換部分文字列から除外せずに また '&' ?

4

2 に答える 2

0

rpattern は(すべてのリンクをキャッチするには)十分ではありませんが、前者はスペース以外のすべてをキャッチするため、代わりに\S+必要になる場合があります。[^\s<>]+

についても同様[^\.\s]です。これを作る[^\s<>.]。文字クラスで使用する場合はドットをエスケープする必要がないため、このグループに追加したのは基本的に大なり記号と小なり記号でした。

于 2013-01-18T13:56:44.140 に答える
0

本当に簡単な解決策:

return '<li>'.preg_replace('@(https?://([-\w.]+[-\w])+(:\d+)?(/([\w-.~:/?#\[\]\@!$&\'()*+,;=%]*)?)?)@', '<a href="$1" target="_blank">$1</a>', $s).'</li>';

本当に正規表現が必要な場合:

return preg_replace('@(https?://([-\w.]+[-\w])+(:\d+)?(/([\w-.~:/?#\[\]\@!$&\'()*+,;=%]*)?)?)@', '<a href="$1" target="_blank">$1</a>', $s);
于 2013-01-18T12:54:19.503 に答える