如何用小写标签搜索结果链接替换标签?

时间:2018-08-20 09:04:55

标签: php algorithm

有一个文本,例如:

> This is a Car

以及动态标签列表。例如:

c, car

预期结果是经过处理后得到的:

This is a <a href='car.ly?search=car'>Car</a>

所以:

  1. 它应使用链接替换替换这些标签的搜索结果
  2. 较长的标签应该比较短的标签更有价值
  3. 它不应替换“ to短语”内的标签,例如“ car.ly”中的“ c”等。
  4. 搜索词应为小写,且标签的标题字母应与原始字母相同
  5. 它应在输入文本中省略标签和样式功能(可以包含HTML)

我已经测试了几种解决方案,但没有成功。处理此案的正确方法是什么?如何用正确链接到搜索结果的链接替换标记?

1 个答案:

答案 0 :(得分:0)

据我所知,您可能想使用preg_replace_callback()

// A test string & some tags
$str = 'This is a Car c ar';
$tags = [ 'c', 'AR', 'car' ];

// sort tags by length
usort($tags, function ($a, $b) { return strlen($b)-strlen($a); });

// Then, replace tags one per one
foreach ($tags as $t) {

    // Will replace tag between whitespaces or start/end of string
    $str = preg_replace_callback('/(?<=\s|^)' . $t . '(?=\s|$)/i', function ($matches) {
        return '<a href="' . strtolower($matches[0]) . '.ly?search=' . strtolower($matches[0]) . '">' . $matches[0] . '</a>';
    }, $str);
}

输出:

<!-- echo $str; -->
This is a <a href="car.ly?search=car">Car</a> <a href="c.ly?search=c">c</a> <a href="ar.ly?search=ar">ar</a>