sorry_i_noob
@sorry_i_noob

Почему preg_match_all у маленького файла все правильно возвращает, а у большого — false?

Здравствуйте. Мне нужно распарсить книгу и взять только контент - главы и их текст, оставив благодарности, оглавление, сноски и тд. Проблема в том, что в одном файле две книги. Я написал вот такой код:
$text = file_get_contents('book_1.txt');
$result = preg_match_all('/Глава первая(?:[\s\S]*?)(?:(?:\n[\r ]*){10})/mu', $text, $matches);

Объясню, что я написал в этой регулярке. Берется слово "Глава первая" и потом любые символы - [\s\S] бесконечное количество раз *. Но квантификатор ленивый - это нужно, чтобы поиск остановился на 10 и более переносах строк (между которыми могут быть переносы каретки и пробелы) - так разделяются книги.
Я пробовал использовать этот код на нужной мне книге - возвращается false. Потом я из книги взял только ее часть - файл получится небольшим. И все отлично работает.
Подскажите, пожалуйста, в чем проблема?
Вот файлы:
https://dropmefiles.com/qYodg
book_1.txt - это полноценная книга.
book_2.txt - это небольшой отрывок.
Помогите, пожалуйста, очень интересно, почему так происходит!
  • Вопрос задан
  • 111 просмотров
Решения вопроса 2
DevMan
@DevMan
воспользуйтесь https://secure.php.net/manual/ru/function.preg-las...
возможно превышаются дефолтные лимиты

у меня код отработал без ошибок
5bf2257675892587034972.png
Ответ написан
Stalker_RED
@Stalker_RED
false возвращается при ошибке.
можно посмотреть что за ошибка при помощи preg_last_error().
echo array_flip(get_defined_constants(true)['pcre'])[preg_last_error()];
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы