Php 突出显示单词并提取其附近文本的函数

Php 突出显示单词并提取其附近文本的函数,php,javascript,jquery,regex,Php,Javascript,Jquery,Regex,我有一个文本,例如: 这是一个很好的例子。整数posuere erat a 这是一个很好的例子。埃蒂亚姆门酒店 malesuada magna mollis euismod。埃尼安·尤利奥·夸姆。佩伦茨克 威尼斯人前庭的鸟雀。福斯·达皮布斯,泰卢斯·ac 通心粉、墨西哥玉米饼调味品、马萨发酵剂 只是坐在阿梅特·里索斯 精英自由主义者,法雷特拉·奥古斯。前庭门舌骨 felis euismod semper。猫门前庭舌骨。 这是一种非大型的植物。 猫门前庭舌骨。整数posuere-erat 这是一张

我有一个文本,例如:

这是一个很好的例子。整数posuere erat a 这是一个很好的例子。埃蒂亚姆门酒店 malesuada magna mollis euismod。埃尼安·尤利奥·夸姆。佩伦茨克 威尼斯人前庭的鸟雀。福斯·达皮布斯,泰卢斯·ac 通心粉、墨西哥玉米饼调味品、马萨发酵剂 只是坐在阿梅特·里索斯

精英自由主义者,法雷特拉·奥古斯。前庭门舌骨 felis euismod semper。猫门前庭舌骨。 这是一种非大型的植物。 猫门前庭舌骨。整数posuere-erat 这是一张威尼斯人的照片

马蒂斯啤酒厂。埃蒂亚姆门酒店 malesuada magna mollis euismod。普雷森特康茂德大教堂 尼斯康塞特图和梅塞纳·福西布斯·莫利斯·因特杜姆。 这是一个很好的例子

该文本显示为在我的网站上执行的搜索的描述,我希望能够突出显示一个单词/字符串并提取其旁边的文本

我不确定最好的方法是使用php(可能是),还是只使用jquery函数。我知道如何在jQuery中突出显示一个单词,但不知道如何提取文本

在本例中,我希望显示为描述,因为我搜索的字符串是“Concertetur purus”,如下文本

…波苏尔·维利特·阿利奎特·克拉斯·马蒂斯·普卢斯·康塞特图·阿梅特 发酵液。埃蒂安门酒店

正如你所看到的,我不仅显示了突出显示的单词,还显示了前后的一些文本。 实现这一目标的最佳方法是什么

我在我的网站上使用swish-e librari作为搜索引擎,我的cgi知识为空,所以我更喜欢尝试php的方式


非常感谢您的帮助

这取决于您在搜索请求后如何获得答案以及搜索引擎的工作方式

如果你的目标是“输入”搜索,就像“谷歌”一样,那么最好使用php来减少传输的数据和浪费更少的流量


否则,如果您得到整个文本作为响应,并且不介意加载-使用RegExp使用JS或使用php中的正则表达式计数
string.charAt(int)

(不过,您可以在JavaScript中也这样做)

这将匹配0-5个使用字母数字字符或
(微调此项)中的一个字符构建的单词,然后是您要查找的单词(末尾有标点符号或没有标点符号),然后是0-5个单词。这将永远不会打破中间的一个词,因为达到一定数量的字符。

输出:

波苏尔·维利特·阿利奎特

在发酵罐中发酵。埃蒂亚姆门酒店


现在您可以对此进行微调,例如,删除
\n
,添加
..
,突出显示
连续purus
..

我们创建了一个小库来执行此操作。它会突出显示你提到的单词,并让你练习你的疑问词周围的句子

$lorumIpsum = "three paragraps of lrum ipsum";
TextSnippet::createSnippet('Lorem', $lorumIpsum);
这将产生以下文本:

Loremipsum dolor sit amet,献身于和平精英。。。这是一种新的生活方式。。。在dapibuslorem中使用Sed。。。Nunc turpis ipsum,bibendum Qus sodales sed,ullamcorper etlorem。Donec和metus hendrerit,国际精英,酒后驾车

类als支持设置用于突出显示的html标记,以及为代码段设置最小和最大单词


请参见Github上的。

str_replace($word,$word,$result)?但这仍将返回全文,我只想提取其摘要。在匹配的单词前后大约10个单词/100个字符。是的,文本已经按照你的想法加载了。你能告诉我如何使用javascript吗?var x=x.replace(“([\S]{,INT\u CHARS\u to_LEFT})”+word+”([\S]{,INT\u CHARS\u to_RIGHT})”,“..$1”+word+“$2…”)@Chifliiii或者,看看我在回答中发布的正则表达式。@Michael:StackOverflow上的注释就是:注释。即使您使用了代码格式(注释中支持这种格式,但非常有限),对于注释来说,这种代码也太多了。当您想要展开答案时,只需编辑它并添加新信息。欢迎来到SO!多谢了,这就成功了。让我问你,如果这个词在文本中出现不止一次,我该怎么办。然后我能把所有的碎片都提取出来让他们一起看吗?@chifliiii你可能想看看preg_match_all@chifliiiii我改进了正则表达式,允许在查询结束时使用标点符号:)在上次更新中似乎出现了一些问题,因为它不再返回值。只是尝试了同样的例子,抱歉,我不知道为什么我的网站上的writecodeonline不起作用,因为我写的搜索像“Concertur”,但在文本上是“Concertur”。有什么方法可以匹配上半身还是下半身?
$lorumIpsum = "three paragraps of lrum ipsum";
TextSnippet::createSnippet('Lorem', $lorumIpsum);