我有一系列的词语:
$matchWords = ['a','is','of'];
和文字一样:
“这是一个测试文本。测试,逗号而不是空格。”
我需要在以下html的文本中替换$ wordsArray中出现的所有单词:
<span style="color:red;">$wordMatched</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中的正则表达式了解不多,所以如果有人能帮到我,那就太棒了。
由于
- EDIT-- 在xdazz回答之后,我测试了以下文本,并且出现了以下内容:
您好,
这是一个跨度的测试。
它真的有用吗?
输出:
<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标签上。除此之外,一切似乎都很好。
答案 0 :(得分:2)
这样的事情:
$matchWords = array('a','is','of');
$text = "This is a test text. Test, comma instead of space.";
$text = preg_replace('/\b('.implode('|', $matchWords).')\b/', '<span style="color:red;">$1</span>', $text);