【发布时间】:2019-06-26 08:35:48
【问题描述】:
我有大量关键字(超过一千个),我需要搜索一个大的 HTML 文件以查找文本中存在哪些关键字。然后我需要返回找到的这些关键字的索引。
例如,如果我的数组是:
$keywords = array("love", "money", "minute", "loop"); // etc.
如果有单词“money”和“loop”的任何实例,我想得到一个数组:
$results = array("1", "3"); // first $keyword element is 0
我尝试使用 preg_match_all,但我不确定如何让 $matches 返回我的关键字的索引。
这是我到目前为止的代码:
$keywords = array("love", "money", "minute", "loop");
$html = file_get_contents($url);
preg_match_all("#(love|money|minute|loop)#i", $html, $matches);
var_dump($matches);
结果如下所示:
array(2) {
[0]=>
array(4) {
[0]=>
string(6) "minute"
[1]=>
string(6) "minute"
[2]=>
string(5) "money"
[3]=>
string(5) "Money"
}
[1]=>
array(4) {
[0]=>
string(6) "minute"
[1]=>
string(6) "minute"
[2]=>
string(5) "money"
[3]=>
string(5) "Money"
}
}
在 PHP 中最快/最优化的方法是什么? preg_match_all 好吗?我想避免使用 foreach,这会导致我的函数抓取整个 HTML 超过一千次(不是很有效)。
如何获取关键字的索引?例如。找到的关键字是 0 号和 3 号,无论其数量多少。
【问题讨论】:
-
索引?就像字数一样?
love peace and coding如果关键字是peace你想要 1 作为回报? -
也是
code上面字符串的一部分吗? -
不,如果您只关心子字符串是否存在,而不关心它存在的位置或存在的次数,那么匹配所有绝对不是最优的。正则表达式比较也比字符串比较慢。
-
preg_match_all并非旨在告诉您单独数组上匹配项的索引。编写一些代码来获取匹配项并在您的数组中找到它以获取您的索引。它的一个循环...... -
@Andreas 通过索引,我指的是文本中出现了哪些关键字,那么它是关键字 1 还是关键字 2 或关键字 75。
标签: php html arrays regex parsing