PHP 来自 mySql 邻近搜索的字符串突出显示
PHP string highlight from mySql proximity search
我想突出显示此查询找到的文本部分:
示例 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 工作”
我需要在字符串中找到突出显示的开始位置,我可以找出结束没问题。
即使经过一些研究,我也没有任何线索。
谢谢,
安迪
只需在 php 中应用相同的正则表达式即可。例如:
<?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>[=10=]</b>', $str);
print $highlighted;
// I have been <b>working for John Joe Smith</b> for the last 5 years
注意,您需要将正则表达式括在一些符号对中(如上例中的 /
.../
)。最后还有修饰符。 i
允许执行 case-insensitive 匹配,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>') ...
我假设您会在 HTML 端显示粗体,这样您就不必 运行 数据库端的正则表达式,您可以在 PHP:
上应用
<?php
$string ="I have been working for John Joe Smith for the last <number> years";
$highlighted = preg_replace("/(working for .*)(for)/", '<b></b> for', $string);
print $highlighted;
// I have been <b>working for John Joe Smith</b> for the last <number> years
?>
我们的想法是找到“为 * 工作”并将其分组,然后将它们分为“为 * 工作”和“为”工作这两个组,然后只替换第一组。
我想突出显示此查询找到的文本部分:
示例 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 工作”
我需要在字符串中找到突出显示的开始位置,我可以找出结束没问题。
即使经过一些研究,我也没有任何线索。
谢谢, 安迪
只需在 php 中应用相同的正则表达式即可。例如:
<?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>[=10=]</b>', $str);
print $highlighted;
// I have been <b>working for John Joe Smith</b> for the last 5 years
注意,您需要将正则表达式括在一些符号对中(如上例中的 /
.../
)。最后还有修饰符。 i
允许执行 case-insensitive 匹配,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>') ...
我假设您会在 HTML 端显示粗体,这样您就不必 运行 数据库端的正则表达式,您可以在 PHP:
上应用<?php
$string ="I have been working for John Joe Smith for the last <number> years";
$highlighted = preg_replace("/(working for .*)(for)/", '<b></b> for', $string);
print $highlighted;
// I have been <b>working for John Joe Smith</b> for the last <number> years
?>
我们的想法是找到“为 * 工作”并将其分组,然后将它们分为“为 * 工作”和“为”工作这两个组,然后只替换第一组。