首页 > 解决方案 > 来自 mySql 邻近搜索的 PHP 字符串突出显示

问题描述

我想突出显示此查询找到的文本部分:

例 1:

SELECT * FROM myTable WHERE columnA regexp 'work.{0,10}john.{0,10}smith'

亮点:“过去 5 年我一直在为 John Joe Smith 工作”

例 2:

SELECT * FROM myTable WHERE columnA regexp 'jo.{0,10}ba.{0,10}tur'

亮点:“过去 5 年我一直在为Joseph Balsora Turgeon工作”

我需要在字符串中找到突出显示的起始位置,我可以找出结束没有问题。

即使经过一些研究,我也没有任何线索。

谢谢,安迪

标签: phpsqlstringhighlight

解决方案


只需在 php.ini 中应用相同的正则表达式。例如:

<?php 
  $str = "I have been working for John Joe Smith for the last 5 years";
  // Assuming you get the $str from the database

  $highlighted = preg_replace('/work.{0,10}john.{0,10}smith/iu', '<b>\0</b>', $str);

  print $highlighted;
  // I have been <b>working for John Joe Smith</b> for the last 5 years

请注意,您需要将正则表达式包含在一对符号中(如上例中的/... /)。最后还有修饰符。i允许执行不区分大小写的匹配,u允许使用 Unicode 字符串/

UPD

也可能您可以直接在 MySQL 中执行相同的替换:

select REGEXP_REPLACE('I have been working for John Joe Smith for the last 5 years','work.{0,10}john.{0,10}smith','<b>\\0</b>') ...

推荐阅读