preg_match_all не работает с переменными результатов базы данных mysql? - PullRequest
2 голосов
/ 08 декабря 2011

- обновление - Хорошо, я сузил это до проверяемых ключевых слов. Ключевые слова будут совпадать только с пробелами между ними, если они жестко запрограммированы в массиве.Если ключевые слова с пробелами, помещенные в массив, являются результатами из базы данных, то 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"; }
}

1 Ответ

0 голосов
/ 08 декабря 2011

Возможно ли, что текст базы данных содержит разрывы строк, а не жестко закодированный текст? Если это так, вы можете использовать модификатор m, чтобы разрешить многострочное сопоставление. Это сделало бы регулярное выражение:

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

Надеюсь, это поможет. Кроме того, если вы не пытаетесь специально подобрать слова / символы UTF, у вас не должно быть никаких проблем с этим.

...