【问题标题】:preg_match_all not working with mysql database results variables?preg_match_all 不能与 mysql 数据库结果变量一起使用?
【发布时间】:2011-12-07 22:06:31
【问题描述】:

--更新-- 好的,我已将其范围缩小到要检查的关键字,如果关键字被硬编码到数组中,则关键字只会与它们之间的空格匹配。如果将带有空格的关键字放入数组中是来自数据库的结果,那么 preg_match_all 将失败并找到 0 个结果。

所以如果我在 php 中对数组进行硬编码

  $myarray = array("This is my Phrase","This is my Second Phrase");

然后对照 texttoscan 检查 preg_match_all 会找到两个阶段,但是 如果我这样做是为了创建数组:

  $result1 = mysql_result($result,$i,"firstphrase"); 
  $result2 = mysql_result($result,$i,"secondphrase"); 
  $myarray = array($result1,$result2);

下面的 preg_match_all 将失败并且找不到短语,但如果我用单个单词而不是短语填充数组,它将起作用。所以我假设我必须准备包含从数据库返回的空格的字符串,但我不确定该怎么做,或者我需要重新格式化正则表达式模式?

    foreach ($myarray as $K) {
    $pattern = "/\b($K)\b/";
    $count = preg_match_all($pattern, $texttoscan, $matches); 
    if($count > 0){ echo "matched"; }
}

【问题讨论】:

  • 这听起来像是编码问题。做strlen($texttoscan) -- 结果是你所期望的还是比这更大的?另外,您的 PHP 源代码保存在什么编码中?

标签: php mysql preg-match-all


【解决方案1】:

数据库文本是否可能包含换行符,而硬编码文本没有?如果是这样,您可能希望使用 m 修饰符来允许多行匹配。这将使正则表达式:

$pattern = "/\b($K)\b/m";

希望对您有所帮助。此外,除非您尝试专门匹配 UTF 单词/字符,否则您应该不会有任何问题。

【讨论】:

  • 哇,谢谢,原来是这样,现在它就像一个魅力:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
  • 2013-01-19
相关资源
最近更新 更多