1

そうコミュニティ!

私は正規表現が初めてで、それらに問題があります。ユーザーデータの単純なパーサーを備えたチャットスクリプトがあります。次のように、BBCode タグを使用して画像を埋め込む機能があります[img]http://example.com/image.png[/img]。また、有効なハイパーリンクへの自動リンク変換も行いたいと考えています。2 つの処理用 REGEX がありますが、それらの間の競合を解決する方法がわかりません。

[img]タグを処理するには、これを使用し、最初に実行します。

$line = preg_replace('/\[img\](https?:\/\/[a-zA-Z0-9%\-_?&=:+.\/]+)\[\/img\]/iU', '<a href="$1" target="_blank"><img class="incl_img" src="$1"></a>', $line, 5);

次に、リンクを処理するためにこれを使用します:

$line = preg_replace('#(https?:\/\/([a-zA-Z0-9-.]+)\/?[a-zA-Z0-9?&=.:\#\/\-_~%+]*)#e', '\'[<a href="$1" title="$1" target="_blank">$2</a>]\'',$line);

また、ユーザーが画像を投稿すると、リンク処理の正規表現は、リンクの代わりに<img>その画像を挿入することでタグを壊します。特別なタグなど<a href=...を使わずに回避するには?単純なリンクからタグ[url]を分離する方法は? [img]正規表現やアルゴリズムの修正は大歓迎です。前もって感謝します!

4

2 に答える 2

0

この小さなヘルパー関数を試してください:

function parseCode($txt)
{
   // these functions will clean the code first
   $ret = strip_tags($txt);

   // code replacements
   $ret = preg_replace('#\[link\=(.+)\](.+)\[\/link\]#iUs', '<a href="$1">$2</a>', $ret);
   $ret = preg_replace('#\[img\](.+)\[\/img\]#iUs', '<img src="$1" alt="Image" />', $ret);

   // return parsed string
   return $ret;
}

利用方法:

echo parseCode('[link=https://www.google.com]Click here to go to google[/link]');
echo "<br />";
echo parseCode('[img]https://www.google.co.uk/images/srpr/logo11w.png[/img]');
于 2013-11-04T11:17:00.613 に答える