Как я могу использовать Regex в цикле while в PHP? - PullRequest
0 голосов
/ 28 марта 2019

Я должен выполнить регулярное выражение в цикле "Пока", потому что для этого нужно много данных, чтобы сделать это за один раз. Теперь я могу выбросить данные, и регулярное выражение также работает, но данные не сохраняются. Так как я могу это сделать?

Теперь это мой код:

$handle = @fopen($PathToFile, "r");
if ($handle) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        if (preg_match_all('/^\w+\s+\d+\s('. $SelectedTime .':\d+.\d+).\d+.\d+\s(.+)/im', $buffer, $matches, PREG_SET_ORDER)) {
            $decodeData[] .= $matches;
        }
        else {

        }
    }

var_dump($decodeData);
}
fclose($handle);

За помощь буду очень рад

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Вам необходимо использовать функцию preg_quote, чтобы корректно экранировать $SelectedTime переменную и использовать $decodedData[] = $matches без .=.

$handle = @fopen($PathToFile, "r");
if ($handle) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        $pattern = '/^\w+\s+\d+\s('. preg_quote($SelectedTime) .':\d+.\d+).\d+.\d+\s(.+)/im';
        if (preg_match_all($pattern, $buffer, $matches, PREG_SET_ORDER)) {
            $decodeData[] = $matches; // just assignment operator
        }
        else {

        }
    }

var_dump($decodeData);
}
fclose($handle);
0 голосов
/ 28 марта 2019

Это неправильный синтаксис, это не конкатенация строк.

Вместо

$decodeData[] .= $matches;

Вывод:

$ decodeData [0] = "Result1Result2Result3Result4 ";

Использование

$decodeData[] = $matches;

Вывод:

$ decodeData [0] =" Result1 ";
$ decodeData [1] = "Result2";
$ decodeData [2] = "Result3";
$ decodeData [3] = "Result4";

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