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

时间:2013-06-14 17:32:38

标签: php regex preg-replace

我有西里尔文和一些关键字(或部分关键字)。我需要在关键字前显示5个字,然后在粗体标记中显示完整的关键字,然后显示5个字。例如:

全文:“Далеко-далекозасловеснымигорамивстранегласныхисогласныхживутрыбныетекстыВдалиотвсехживутонивбуквенныхдомахнаберегуСемантикабольшогоязыковогоокеанаМаленькийручеекДальжурчитповсейстранеиобеспечиваетеевсеминеобходимымиправилами。 。“

关键字是“АНТИК”(这就是不区分大小写的原因)

结果,我需要:“...вбуквенныхдомахнаберегуСемантикабольшогоязыковогоокеана.Маленькийручеек...”

2 个答案:

答案 0 :(得分:1)

尝试使用:

$str = "Далеко-далеко за словесными горами в стране гласных и согласных живут рыбные тексты. Вдали от всех живут они в буквенных домах на берегу Семантика большого языкового океана. Маленький ручеек Даль журчит по всей стране и обеспечивает ее всеми необходимыми правилами.";
$kwd = "АНТИК";
preg_match("#((\p{Cyrillic}+ \.?){0,5}(\p{Cyrillic}*$kwd\p{Cyrillic}*)( \p{Cyrillic}+){0,5})#iu", $str, $m);
echo $m[1];

答案 1 :(得分:1)

您可以使用:

$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字符类(匹配每个字母数字和下划线),您的文本使用西里尔字符编写的事实无关紧要。请注意,您可以\w\pL替换\p{Cyrillic}。如你所愿。