preg_match точное слово и распечатать всю строку, в которой был найден результат - PullRequest
0 голосов
/ 15 февраля 2011

Мне трудно понять, как это сделать.

Я хочу найти слово, а затем я хочу, чтобы поиск возвращал слово вместе со всем содержимым строки, в которой было найдено слово.

Слово должно быть чувствительным к регистру, поэтому поиск TOM не вернет Тома вместе с результатами.

это то, что я пробовал до сих пор.

$contents = file_get_contents($file);
$pattern = preg_quote($word, '/');
$numInt  = 0;
$pattern = "/^.*$pattern.*\$/m";
if(preg_match_all($pattern, $contents, $matches))
{
    $numInt = count($matches[0]);
}

Когда я запускаю эту функцию через свою функцию, она возвращает нужные мне результаты, но я заметил, что она не согласована с другим ключевым словом.

В моем текстовом файле для тестирования у меня есть INT (x18), и моя функция возвращает 18 в качестве счетчика. Но если я использую ключевое слово MORNING (x29), функция возвращает 31, что технически правильно, поскольку в 2 случаях используется morning.

1 Ответ

2 голосов
/ 15 февраля 2011

Ну, вы можете избежать использования всех этих регулярных выражений для этой задачи.

Вот код, который я написал:

<?php 
$contents = file_get_contents($file);

#standardise those line endings
$contents = str_replace(array("\r","\r\n","\n\r","\n"),"\n",$contents);
$lines = explode("\n", $contents);

#find your result
$result = $line_num = array();
foreach($lines as $line_num => $l)
  if(strpos($l, $word)) {
   $result[] = $l;
   $line_nums[] = $line_num;
  }

echo "<pre>";
print_r($result);
echo "<br>Count:".count($result);
...