preg_replace を使用して、特定のリストから単語と単語のシーケンスをラップしようとしています。ほとんど機能しますが、機能しないユースケースがいくつかあり、その方法がわかりません。
たとえば、私はこれを行います:
// sort by descending length
usort($this->_keywords, function($a,$b){return(strlen($a)<strlen($b));});
// wrapper is -%string%-
foreach ($this->_keywords as $keyword) {
$value = preg_replace('/((?!-)' . $keyword . '(?!-))/i', str_replace('%string%', '\1', $this->_wrapper), $value);
}
このキーワード リストから:
- ロレム
- イプサム
- 座って
- ヌル
- シード
- セド・エニム
私は次のようになりたい:
-Lorem- -ipsum- dolor -sit amet- , consectetur adipiscing elit. Phasellus rhoncus venenatis orci sed porta. セド ノン ドロール エロス。massa を中断する - 座る amet- nulla egestas facilisis. Cras fringilla、leo ac ullamcorper semper、urna eros pretium lectus、nec rhoncus ligula risus eu velit。Nulla eu dapibus マグナ。Sed vehicula tristique lacinia。Maecenas tincidunt metus at urna consequat nec congue libero iaculis. Nulla facilisi。Phasellus -sed- sem ut risus mattis accumsan eu -sed enim- . Pellentesque 居住者 morbi tristique senectus et netus et malesuada 名声 ac turpis egestas. Suspendisse id est velit, eu cursus quam. Vivamus lacinia euismod pretium。
何か案は?