【发布时间】:2026-02-13 11:10:01
【问题描述】:
我在 mysql 表中有数百万个字符串数据,并且必须与表中的字符串一一交叉检查,如果匹配返回 true 或 false。 我尝试了如下简单的 preg_match,这会消耗更多的内存和时间。
<?php
$message = 'Hi xyz your account 123 credited Rs. 456 available balance is 789';
$template = "/Hi .+? your account .+? credited Rs. .+? available balance is .+?/";
$sql = "SELECT * FROM templates";
$result = $conn->query($sql);
$flag = false;
if ($result->num_rows > 0) {
// output data of each row
while ($row = $result->fetch_assoc()) {
$template = $row["template"];
if (preg_match($template, $message)) {
$flag = true;
break;
}
$flag = false;
}
$flag = false;
}
return $flag;
我也试过php_aho_corasick 但没用。请提出一些解决问题的好方法。 提前致谢。
编辑:我们有数百万个模板,这里是示例模板
$template1 = "/Hi .+? your account .+? credited Rs. .+? available balance is .+?/";
$template2 = "/Hi .+? your account .+? credited Rs. .+? available balance is .+? get more upate on/";
$templateN = "/Hello .+? click the link .+? to get your available balance./";
$message = "Hi xyz your account 123 credited Rs. 456 available balance is 789";
$message xyz, 123, 456, and 789 中的动态值会发生变化,现在必须与 N 个与消息匹配的模板进行交叉检查。如果我们将 template1 中的 .+? 替换为 message 那么将得到完全匹配,而 template2 有额外的单词,而 templateN 则完全不同。那么哪种方式是处理此类情况的更好方法。
【问题讨论】:
-
也许一个好的解决方案是在你的 sql 中尝试正则表达式?
标签: php arrays string preg-match string-matching