正则表达式,它将使用西里尔关键字(不区分大小写)剪切西里尔文本的片段并将其加粗


Regular expression, that will be cut fragment of the cyrillic text with cyrillic keyword(case insensitive) and bold it

我有西里尔字母文本和一些关键字(或它的一部分)。我需要在关键字前显示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];