2012-04-26 8 views
1

preg_matchまたはpreg_replaceを使用して段落をスキャンし、各パターンをリンクで置き換える方法はありますか?preg matchまたはpregで段落内のリンクの書式を変更する

例:

... <a href="http://mysite.com/keyword/">keyword</a> ... <a href="http://mysite.com/another-keyword/">another-keyword</a> ... 

感謝を次のようになります

... [keyword][http://mysite.com/keyword/] ... [another-keyword][http://mysite.com/another-keyword] ... 

。またはhttps::彼らは任意の二重引用符が含まれていないことを、すべてのリンクがhttpで開始することを前提としてい

preg_replace('/\[([^\]]+)\]\[(https?:[^\]"]+)\]/i','<a href="$2">$1</a>',$string); 

:よう

+1

ていますが、それらは* BBコードの* '[URL = HTTPのようないくつかの方法で翻訳されるべきかを識別するための方法があればそれがベストです: – craniumonempty

答えて

1

何か。 http://regexpal.com/は、これらのパターンを考案する際に役立つツールです。

しかし、これらのタグを管理している場合は、独自の発明ではなく、bbcodeのような既存のタグ付けスキームを使用することをおすすめします。 bbcodeを解析するための既存のコードがたくさんあります。あなたが思いつくものよりもはるかに堅牢で、よくテストされています。解析しようとしている文字列の元を信頼できますか?これをやめて厄介なセキュリティ上の問題を作り出すのは本当に簡単です。はい

$out = preg_replace_callback('!\[([^\[\]]+)\]\[([^\[\]]+)\]!', 'callback', $in); 

function callback($m){ 
    return "<a href=\"$m[2]\">$m[1]</a>"; 
} 
1

ちょうど preg_replace_callback()を使用//サイトを。 com] keyword [/ url] `を使用しますが、パターンが簡単に選択され、他のものに使用されたり混乱したりしないようにする必要はありません。
関連する問題