@GeKskill

PHP preg_match_all и большая строка (760к)?

Надо по regex вытягивать пути из строки (760к символов);
На небольшой строке скрипт отрабатывает нормально. Но непонятно с какого размера и почему preg_match_all начинает отдавать пустые массивы в $matches. С чем это связано?
<?php 
$names = file('./images_names.txt');
$folders = glob('E://newf/*', GLOB_ONLYDIR);
$count = 0;
//foreach($folders as $folder) {
	$glob = glob("E://newf/01/*",GLOB_NOSORT);
	$paths = implode('|', $glob);
	var_dump($paths);
	foreach ($names as $name) {
		$name = strtolower(trim($name));
		$regex = "/([^|]*".$name."[^|]*)/m";
		//echo $regex;
		preg_match_all($regex, $paths, $matches, PREG_SET_ORDER, 0);
		//var_dump($matches);
			foreach ($matches as $match) {
				//unlink($match[0]);
				//$paths = str_replace($match[0], '', $paths);
				$count++;
		}
	}
//}
echo $count;
?>
  • Вопрос задан
  • 225 просмотров
Решения вопроса 2
@bkosun
Измените настройки PCRE:

ini_set('pcre.backtrack_limit', 10000000); // Лимит обратных ссылок


https://www.php.net/manual/ru/pcre.configuration.php
Ответ написан
Stalker_RED
@Stalker_RED
Регулярки всегда плохо работали на длинных строках. Медленно, много памяти жрут, вот это все. Есть, конечно, специально модифицированные библиотеки для больших объемов, но с урезаными возможностями.

В вашем случае проще обработать файл построчно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы