3

正規表現を使用して、特定の単語を強調表示するコードに取り組んでいます。

ここにあります:

function addRegEx($word){
        return "/\b(\w+)?".$word."(\w+)?\b/i";
    }
    function highlight($word){
        return "<span class=\"highlighted\">".$word[0]."</span>";
    }
    function customHighlights($searchString,$toHighlight){
        $searchFor = array_map('addRegEx',$toHighlight);
        $result = preg_replace_callback($searchFor,'highlight',$searchString);
        return $result;
    }

関数customHighlightsを使用して、特定のテキストで「車」という単語を検索するとします。

境界 - \b - メソッドを使用して、スクリプトはテキスト内の単語 car を検索します。

正規表現では、(\w+)?を追加しました。つまり、スクリプトは「car」を含む単語( cars、sportcars など) に一致します。

問題は、内部の html を台無しにすることです。次に例を示します。

This is a great car. Click here for <a href="http://cars.com">more</a>

スクリプトは、上記のリンクの URL にある car という単語に一致し、それにスパン クラスを追加して、html を台無しにします。

正規表現をどのように変更してこれを回避しますか?

4

2 に答える 2

0

Javascript を使用して、クライアント側でテキストの強調表示を処理することを検討しましたか? jQuery などを使用すると、ノードを繰り返し処理して、生の HTML を操作する代わりに強調表示する場所を見つけることができます。ただし、正規表現についてはあまり役に立ちません。

于 2013-08-13T11:52:41.220 に答える
0

テキストの最後または最初の後にある単語を検索する正規表現を使用します>が、これと単語の間の部分にはタグ start が含まれていない場合があります<

このコードパッドを参照してください

コード

<?php
$str = 'This is a great car. Click here for <a href="http://cars.com">more cars</a>';
$word = 'car';
$exp = "/((^|>)[^<]*)(\b(\w+)?".$word."(\w+)?\b)/i";
$repl = "\\1<span class=\"highlighted\">\\3</span>";
var_dump(preg_replace($exp, $repl, $str));
?>

出力

string(141) "This is a great <span class="highlighted">car</span>. Click here for <a href="http://cars.com">more <span class="highlighted">cars</span></a>"
于 2013-08-13T11:52:55.533 に答える