PHP preg_match_all не работает на двоичных данных - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь использовать preg_match_all, чтобы найти все объекты в PDF-файле.Я использую следующее регулярное выражение, которое возвращает 2 совпадения из 700, которые, как я знаю, существуют:

preg_match_all('/[0-9]+ [0-9]+ obj\r\n(.*?)endobj/s', $data, $matches);

Использование того же регулярного выражения работает в python, но, похоже, это не работает в Windows и Linux, если используется PHPчтобы соответствовать.Это просто ошибка или есть какой-то флаг, который мне нужно использовать, о котором я не знаю?

1 Ответ

0 голосов
/ 26 февраля 2019

Кажется, проблема связана с размером потока в файле.Когда я читал файл с file_get_contents и запускал preg_match_all, я получал ошибку предела возврата назад из preg_match, однако, когда я копировал текст из notepad ++ и вставлял его в веб-форму, в которой использовалось то же регулярное выражение, что и я.Оказывается, когда я его вставил, он читался как UTF8, и, следовательно, в нем было меньше символов, поэтому я не достиг предела возврата.Размер потока был достаточно велик, чтобы он работал как UTF8, но я бы достиг предела возврата по чуть более длинному тексту ANSI.

В конечном итоге я изменил регулярное выражение для поиска только начала объекта, а затем использовал strpos, чтобы найти конец.Это оказалось намного более эффективным методом, чем ([0-9] + [0-9] +) obj (. *?) Endobj

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