我有西里尔字母文本和一些关键字(或它的一部分)。我需要在关键字前显示5个单词,然后在粗体标签中显示完整关键字,然后5个单词。例如:
全文:"Далеко——далекозасловеснымигорамивстранегласныхисогласныхживутрыбныетексты。ВдалиотвсехживутонивбуквенныхдомахнаберегуСемантикабольшогоязыковогоокеана。МаленькийручеекДальжурчитповсейстранеиобеспечиваетеевсеминеобходимымиправилами。"
关键字是"АНТИК"(这就是为什么不分大小写)。
结果,我需要:"…"вбуквенныхдомахнаберегуСемантикабольшогоязыковогоокеана。Маленькийручеек……"
你可以这样做:
$word = "АНТИК";
$pattern = '~^.*?((?>'w++'W++){0,5})('w*'.$word.''w*+)((?>'W++'w++){0,5}).*$~usi';
$result = preg_replace($pattern, '$1<strong>$2</strong>$3', $text);
如果您使用'w字符类(匹配每个字母、数字和下划线),那么您的文本是用西里尔字符写成的这一事实并不重要。注意,可以用'pL
或'p{Cyrillic}
代替'w
。随你便
试一试:
$str = "Далеко-далеко за словесными горами в стране гласных и согласных живут рыбные тексты. Вдали от всех живут они в буквенных домах на берегу Семантика большого языкового океана. Маленький ручеек Даль журчит по всей стране и обеспечивает ее всеми необходимыми правилами.";
$kwd = "АНТИК";
preg_match("#(('p{Cyrillic}+ '.?){0,5}('p{Cyrillic}*$kwd'p{Cyrillic}*)( 'p{Cyrillic}+){0,5})#iu", $str, $m);
echo $m[1];