4

文字列内の単一の単語を強調表示する関数を作成しました。次のようになります。

function highlight($input, $keywords) {

    preg_match_all('~[\w\'"-]+~', $keywords, $match);

    if(!$match) { return $input; }

    $result = '~\\b(' . implode('|', $match[0]) . ')\\b~i';

    return preg_replace($result, '<strong>$0</strong>', $input);

}

検索でスペースをサポートするさまざまな単語の配列を操作する関数が必要です。

例:

$search = array("this needs", "here", "can high-light the text");

$string = "This needs to be in here so that the search variable can high-light the text";

echo highlight($string, $search);

これまでのところ、必要に応じて機能するように機能を修正するために持っているものは次のとおりです。

function highlight($input, $keywords) {

    foreach($keywords as $keyword) {

        preg_match_all('~[\w\'"-]+~', $keyword, $match);

        if(!$match) { return $input; }

        $result = '~\\b(' . implode('|', $match[0]) . ')\\b~i';

        $output .= preg_replace($result, '<strong>$0</strong>', $keyword);

    }

    return $output;

}

明らかにこれは機能せず、これを機能させる方法もわかりません (正規表現は私の得意分野ではありません)。

問題になる可能性のあるもう 1 つの点は、関数が複数の一致をどのように処理するかということです。$search = array("in here", "here so");結果は次のようになります。

This needs to be <strong>in <strong>here</strong> so</strong> that the search variable can high-light the text

ただし、これは次のようにする必要があります。

This needs to be <strong>in here so</strong> that the search variable can high-light the text

4

1 に答える 1

3

説明

用語の配列を取得して正規表現またはステートメントと結合し、|それらを文字列にネストできますか。は、\b単語の断片をキャプチャしていないことを確認するのに役立ちます。

\b(this needs|here|can high-light the text)\b

ここに画像の説明を入力

\1次に、キャプチャ グループ?を使用して、これを代替として実行します。

私はPythonにはあまり詳しくありませんが、PHPでは次のようにします:

<?php
$sourcestring="This needs to be in here so that the search variable can high-light the text";
echo preg_replace('/\b(this needs|here|can high-light the text)\b/i','<strong>\1</strong>',$sourcestring);
?>

$sourcestring after replacement:
<strong>This needs</strong> to be in <strong>here</strong> so that the search variable <strong>can high-light the text</strong>
于 2013-05-29T02:26:10.850 に答える