搜索:
脚本+语言Web +页面应用程序
结果:
... 脚本语言最初......生成动态网页。它具有......图形应用程序 ....目的脚本语言,即创建网页作为输出... < / p>
假设我想要一个值,表示在匹配项的任一侧允许填充的字符数量,另一个值表示结果中将显示多少匹配(即,我只希望看到第一个5场比赛,仅此而已。)
你究竟会怎么做呢?
这与语言无关,但我将在PHP环境中实现该解决方案,因此请限制不需要特定语言或框架的选项的答案。
这是我的思考过程:从搜索词创建一个数组。确定哪个搜索词具有关于在文章正文中找到的位置的最低索引。将身体的那部分收集到另一个变量中,然后从文章体中删除该部分。返回步骤1.您甚至可以为每个单词添加一个计数器,当计数器达到3左右时跳过它。
重要:
解决方案必须以非线性方式匹配所有搜索字词。意思是,如果在第二学期之后存在,则应在第二学期之后找到第一学期。同样,它也应该在第3学期之后找到。第3学期应该在第1和第2学期之前找到,如果碰巧存在于第3学期和第2学期之前。
解决方案应该允许我声明“每个术语最多只允许三个匹配,然后终止摘要。”
额外信用:
获取padding-variable以选择填充单词,而不是字符。
答案 0 :(得分:1)
我的思考过程:
array
对象中支持此功能)伪代码,或者我最好的尝试:
function string GetSearchExcerpt(searchText, searchTerms, wordPadding = 0, searchLimit = 3)
{
results = new array()
startIndex = 0
foreach (searchTerm in searchTerms)
{
charIndex = searchText.FindByIndex(searchTerms, startIndex) // finds 1st position of searchTerm starting at startIndex
results.Add(searchTerm, charIndex)
startIndex = charIndex + 1
}
results = results.SortByValue()
lastSearchTerm = ""
searchTermCount = new array()
outputText = ""
foreach (searchTerm => charIndex in results)
{
searchTermCount[searchTerm]++
if (searchTermCount[searchTerm] <= searchLimit)
{
// WordPadding is a simple function that moves left or right a given number of words starting at a specified character index and returns those words
outputText += "..." + WordPadding(-wordPadding, charIndex) + "<strong>" + searchTerm + "</strong>" + WordPadding(wordPadding, charIndex)
}
}
return outputText
}
答案 1 :(得分:-1)
就个人而言,我会将搜索词转换为正则表达式,然后使用正则表达式查找替换将匹配包装在强标签中以进行格式化。
RegEx路线最有可能是您最好的选择。因此,在您的示例中,您最终会获得三个单独的RegEx值。
由于你需要一个非语言相关的解决方案,我不会在这里放置实际的表达式,因为确切的语法因语言而异。