RegEx для сопоставления шаблона в строках запроса - PullRequest
1 голос
/ 09 мая 2019

У меня есть некоторый код, который создаст строку запроса, перебирает и проверяет строки запроса.

$pi = An ip defined
$bo = The content of a file.

Я ищу в $bo и ищу $pi, и я хочу распечатать ВСЕ строки, соответствующие этой строке, но у меня возникают некоторые проблемы с печатью определенных строк из $bo.

Это то, что входит в $bo:

if (strstr($bo, $pi)) {
    echo "<tr>";
    echo "<td>" . preg_match($ip, $body) . "</td>";
    echo "</tr>";
    $count++;
}

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Вот общий шаблон, который вы можете использовать для всей строки, которая содержит строку $ip:

$pattern = '/^.*\b' . $ip . '\b.*$/m';

Затем мы можем использовать этот шаблон с preg_match_all, чтобы найти все подходящие строки:

preg_match_all($pattern, $body, $matches);
print_r($matches[0]);
0 голосов
/ 09 мая 2019

Я бы использовал preg_grep() вместо preg_match(), потому что он напрямую возвращает только совпадения и не требует построения шаблона для захвата линии.Однако он требует, чтобы входные данные были массивом строк из файла, что вы можете легко сделать с помощью file() или explode():

// Read a file directly into an array.
$body = file('/path/to/file');

// Or split an existing big string into an array of lines.
$body = explode("\n", $fileContents);

foreach (preg_grep($ip, $body) as $line) {
    echo $line;
}

или просто:

echo implode("\n", preg_grep($ip, $body));
...