次のような単語の配列があります。
$matchWords = ['a','is','of'];
そして、次のようなテキスト:
「これはテスト テキストです。スペースの代わりにコンマをテストしてください。」
次の html のテキストで、$wordsArray 内のすべての単語を置き換える必要があります。
<span style="color:red;">$wordMatched</span>
他の言葉はタグに置き換える必要があります。
したがって、基本的に私の問題は次のようになります。
- 世界のみに一致します(文字「a」ではなく「a」という単語を検索した場合。
- html の a タグとspanタグの内部は何も一致させないでください。
だから、私はこれまでのところ次のコード:
$wordsArray = ['this','is','a','test','text','comma','instead','of','space'];
$matches = ['a','is','of'];
$text = "This is a test text. Test, comma instead of space.";
foreach($wordsArray as $word){
if(in_array($word, $matches)){
$known[] = '(^|[.!?: ;,])'.$word.'([.!?: ;,]|$)';
}
else{
$notKnown[] = '(^|[.!?: ;,])'.$word.'([.!?: ;,]|$)';
}
}
// Known
$wordList = implode('|', $known);
$text = preg_replace('/('.$wordList.')/', '<span>$1</span>', $text);
// Not Known
$wordList = implode('|', $notKnown);
$text = preg_replace('/('.$wordList.')/', '<a href="texts/addWord&word=$1" class="info label">$1</a>', $text);
一致にスペースと区切り文字が追加されるため、これは機能しません。
正直に言うと、私は PHP の正規表現をあまり理解していません。
ありがとう
--編集-- xdazzの回答の後、次のテキストをテストしたところ、次の結果が得られました。
やあ、
これは、いくつかのスパンの aa aaaa テストです。
それは本当に働いていますか?
出力:
<a class="wordLink info label" href="texts/addWord&word=Hi">Hi</a>,<br />
<br />
<a class="wordLink info label" href="texts/addWord&word=This">This</a> <<a class="wordLink info label" href="texts/addWord&word=span">span</a> style="color:red;">is</<a class="wordLink info label" href="texts/addWord&word=span">span</a>> <a class="wordLink info label" href="texts/addWord&word=aa">aa</a> <<a class="wordLink info label" href="texts/addWord&word=span">span</a> style="color:red;">a</<a class="wordLink info label" href="texts/addWord&word=span">span</a>> <<a class="wordLink info label" href="texts/addWord&word=span">span</a> style="color:red;">a</<a class="wordLink info label" href="texts/addWord&word=span">span</a>> <<a class="wordLink info label" href="texts/addWord&word=span">span</a> style="color:red;">a</<a class="wordLink info label" href="texts/addWord&word=span">span</a>> <<a class="wordLink info label" href="texts/addWord&word=span">span</a> style="color:red;">a</<a class="wordLink info label" href="texts/addWord&word=span">span</a>> <a class="wordLink info label" href="texts/addWord&word=test">test</a> <<a class="wordLink info label" href="texts/addWord&word=span">span</a> style="color:red;">of</<a class="wordLink info label" href="texts/addWord&word=span">span</a>> <a class="wordLink info label" href="texts/addWord&word=some">some</a> <a class="wordLink info label" href="texts/addWord&word=span">span</a> <<a class="wordLink info label" href="texts/addWord&word=span">span</a> style="color:red;">thing</<a class="wordLink info label" href="texts/addWord&word=span">span</a>>.<br />
<br />
<a class="wordLink info label" href="texts/addWord&word=Is">Is</a> <<a class="wordLink info label" href="texts/addWord&word=span">span</a> style="color:red;">it</<a class="wordLink info label" href="texts/addWord&word=span">span</a>> <a class="wordLink info label" href="texts/addWord&word=really">really</a> <a class="wordLink info label" href="texts/addWord&word=working">working</a>?
問題は span タグにあると思います。それ以外はすべて良さそうです。