2011-09-15 7 views
0

私は今朝は厚くなっていますので、この簡単な質問をお許しください。 array('keyword1','keyword2'....)と私はテキストの文字列を持っています - (長さがブログの内容のようなビットです(数ビットだけではありませんが、200-800ワードになるかもしれません)キーワードの文字列を検索してhrefリンク。したがって、テキスト 'キーワード1'(プレーンテキストとして)は<a href='apage'>keyword1</a>となります。PHPは文字列のキーワードをhrefのリンクで置き換えます

これは厚いと言います。

ありがとうございました。

答えて

2

典型preg_replace場合:

$text = "There is some text keyword1 and lorem ipsum keyword2."; 
$keywords = array('keyword1', 'keyword2'); 

$regex = '/('.implode('|', $keywords).')/i'; 

// You might want to make the replacement string more dependent on the 
// keyword matched, but you 'll have to tell us more about it 
$output = preg_replace($regex, '<a href="apage">\\1</a>', $text); 

print_r($output); 

See it in action

ここでは、hrefが一致したキーワードの機能ではないという点で非常に「スマートな」置換はありませんが、実際にはそうしたいと思うでしょう。ここで柔軟性を高めるためにpreg_replace_callbackを調べるか、質問を編集して目標に関する詳細情報を提供してください。

+0

私が欲しいのは、ちょうど興味のないことですが、キーワードが初めて発生するときに「一致」する方法はありますか? –

+0

@RussellParrott:*いずれかの*キーワードの最初のインスタンスのみをマッチングすると[simple](http://stackoverflow.com/questions/6729710/replace-only-first-match-using-preg-replace)です。 *それぞれの*キーワードの最初のインスタンスをマッチングするのは簡単ではありません。ループ内の1つのキーワードに対して 'preg_replace'を実行するか、' preg_replace_callback'を使用するか、少なくとも1回は既に一致しているキーワードを覚えておき、キーワード自体を置換えとして返します。すでに見た人たちのために。 – Jon

0

なぜstr_replace()の代わりに正規表現を使用しますか? Regexは動作しますが、これは非常に簡単な質問を複雑にします。

関連する問題