突出显示周围文字的文字

pil*_*ila 8 php regex

我想用给定的关键字突出显示给定字符串中的文本,并添加随机数量的周围单词.

例句:

Lorem ipsum dolor sit amet,consetetur sadipscing elitr,sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,sed.

示例关键字:

dolore magna

期望的结果:( 在关键字之前和之后标记0-4个单词

Lorem ipsum dolor sit amet,consetetur sadipscing elitr,sed diam nonumy eirmod tempor invidunt ut labore et **dolore magna** aliquyam erat, sed.

我尝试了什么?

( [\w,\.-\?]+){0,5} ".$myKeyword." (.+ ){2,5}([a-zA-Z,. ]+){1,3} ".$n." ([a-zA-Z,. ]+){1,3}

任何想法如何改善这一点,使其更健壮?

Jon*_*y 5 5

为了突出显示使用preg_replace函数。这是一个想法:   $s = "dolore magna";

$str = preg_replace(
       '/\b(?>[\'\w-]+\W+){0,4}'.preg_quote($s, "/").'(?:\W+[\'\w-]+){0,4}/i',
       '<b>$0</b>', $str);
Run Code Online (Sandbox Code Playgroud)

在 regex101 处测试模式在 eval.in处进行php 测试。   echo $str;

Lorem ipsum dolor sat amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut Labore et dolore magna aliquyam erat, sed .

使用i 标志进行无壳匹配 - 如果不需要则删除。用于性能的第一组?> 原子

  • 作为我使用的单词字符['\w-](单词字符的\w 简写'-
  • \W匹配一个字符,它不是一个单词字符(否定\w
  • \b匹配一个词边界。使用它以获得更好的性能。


chr*_*s85 3

我认为这会实现你所追求的目标。请参阅演示以了解正则表达式正在执行的所有操作的说明,或者如果您有疑问,请发表评论。

正则表达式:

((?:[\w,.\-?]+\h){0,5})\b' . . '\b((?:.+\h){2,5})
Run Code Online (Sandbox Code Playgroud)

演示: https: //regex101.com/r/vG8qT2/1

PHP:

<?php
$string = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed.';
$term = 'dolore magna';
$min = 0;
$max = 5;
preg_match('~((?:[\w,.\-?]+\h){'.$min.','.$max. '})\b' . preg_quote($term) . '\b((?:.+\h){'.$min.','.$max.'})~', $string, $matches);
print_r($matches);
Run Code Online (Sandbox Code Playgroud)

演示:https ://eval.in/410063

请注意,捕获的值将位于$matches[1]和中$matches[2]