3

次の解決策を提案してください。

たとえば、「サスペンディスポテンティ」というテキストの文字列があります。

文字列の html を検索し、span タグでラップする必要があります。

となることによって

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque 
scelerisque neque in eros convallis egestas. Phasellus lacus massa, 
laoreet cursus scelerisque id, posuere ac mauris. In hac habitasse 
platea dictumst. Aenean eros dui, congue ut ultrices vitae, convallis
quis felis. Ut non ante non nunc tempus ultrices et et ipsum. 
Suspendisse potenti. In sed mauris vel nibh dapibus 
pellentesque eu id dolor. Morbi dictum quam eleifend ante mattis rutrum. 
Mauris nisl ligula, consectetur eget gravida vel, varius vel metus. 
Nullam a ante metus.</p>

になるだろう

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque 
scelerisque neque in eros convallis egestas. Phasellus lacus massa, 
laoreet cursus scelerisque id, posuere ac mauris. In hac habitasse 
platea dictumst. Aenean eros dui, congue ut ultrices vitae, convallis
quis felis. Ut non ante non nunc tempus ultrices et et ipsum. 
<span class="search-match" id="search-term-0">Suspendisse potenti</span>. 
In sed mauris vel nibh dapibus pellentesque eu id dolor. Morbi dictum 
quam eleifend ante mattis rutrum. Mauris nisl ligula, consectetur eget 
gravida vel, varius vel metus. Nullam a ante metus.</p>

私はこれを使用して作業しています:$text = preg_replace_callback( '/(' . preg_quote($searchTerm, '/') . '*)/', "Search::addSearchId", $text );

私が抱えている問題は、検索しているテキストの文字列の一部が html タグにある場合です。

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque 
scelerisque neque in eros convallis egestas. Phasellus lacus massa, 
laoreet cursus scelerisque id, posuere ac mauris. In hac habitasse 
platea dictumst. Aenean eros dui, congue ut ultrices vitae, convallis
quis felis. Ut non ante non nunc tempus ultrices et et ipsum. 
Suspendisse <a href="/link">potenti</a>. In sed mauris vel nibh dapibus 
pellentesque eu id dolor. Morbi dictum quam eleifend ante mattis rutrum. 
Mauris nisl ligula, consectetur eget gravida vel, varius vel metus. 
Nullam a ante metus.</p>

またはタグ内の検索用語と追加テキスト

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque 
scelerisque neque in eros convallis egestas. Phasellus lacus massa, 
laoreet cursus scelerisque id, posuere ac mauris. In hac habitasse 
platea dictumst. Aenean eros dui, congue ut ultrices vitae, convallis
quis felis. Ut non ante non nunc tempus ultrices et et ipsum. 
Suspendisse <a href="/link">potenti In sed</a> mauris vel nibh dapibus 
pellentesque eu id dolor. Morbi dictum quam eleifend ante mattis rutrum. 
Mauris nisl ligula, consectetur eget gravida vel, varius vel metus. 
Nullam a ante metus.</p>

これは、タグのない単純な文字列だけを検索しているため、明らかにテキストを見逃しています。

プレーン文字列だけでなく、html を含む文字列にも一致する便利な正規表現を持っている人はいますか?

これは、検索ページから参照された後、ページの上部にいくつかのアンカーを作成することです。検索語を強調表示したいので、文字列全体をラップする必要があります。

4

1 に答える 1

3

これを試して

$result = preg_replace_callback('%\b(Suspendisse potenti)(?!</\w+)\b%im', 'compute_replacement', $subject);

function compute_replacement($groups) {
    // You can vary the replacement text for each match on-the-fly
    // $groups[0] holds the regex match
    // $groups[n] holds the match for capturing group n
    return '<span>$1</span>';
}
于 2012-06-13T09:19:01.437 に答える