Регулярное выражение для выбора определенных элементов HTML [Curl / PHP]

Я пытаюсь очистить некоторые конкретные данные и вывести их на свой сайт.

Регулярное выражение для выбора определенных элементов HTML [Curl / PHP]

Я использую Curl в PHP, и это регулярное выражение, которое я пытаюсь использовать, но оно дает мне ошибку. Неустранимая ошибка: допустимый размер памяти для байтов оперативной памяти исчерпан. что означает, что требуется много файлов.

код:

preg_match_all('!<th scope = "(\b[a-zA-Z]+\b)">(\b[a-zA-Z]+\b)</th><td><a href = "/wiki/(\b[a-zA-Z]+\b)" title = "(\b[a-zA-Z]+\b)">(\b[a-zA-Z]+\b)</a>!',$result,$cap_matches);
$cap_name = array_values(array_unique($cap_matches[0]));
echo $cap_name[0];

ive попытался сделать регулярное выражение только тегом "a ...", но я получил много результатов, я просто хочу получить капитал.

stackoverflow.com/questions/1732348/…
AbraCadaver 21.05.2018 21:57

Вы пробовали использовать PHP Xpaths?

dGRAMOP 21.05.2018 22:05

Вы должны были опубликовать код для получения содержимого URL, что является причиной этой ошибки.

revo 21.05.2018 22:07

@dGRAMOP нет, но я не могу проверить их прямо сейчас.

GioZio 21.05.2018 22:08

@AbraCadaver Я понял, что с регулярным выражением я не могу анализировать теги html и т.д. Но есть ли какое-либо решение в примере с регулярным выражением?

GioZio 21.05.2018 22:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо этого не анализируйте HTML с помощью регулярного выражения. использует правильный анализатор HTML, например DOMDocument.

$domd = @DOMDocument::loadHTML ( $result );
unset($result);
$xp = new DOMXPath ( $domd );
$capital = $xp->query ( '//th[text() = "Capital"]/following-sibling::td/a' )->item ( 0 )->getAttribute("title");
unset($domd,$xp);
var_dump ( $capital );

Что касается предотвращения ошибок OOM, попробуйте обернуть ваши наиболее требовательные к памяти операции в более мелкие функции, позволяя сборщику мусора очистить все при выходе из функции, или unset () ваши большие переменные как можно скорее, когда они больше не нужны ... (обычно я бы не стал используйте unset () в приведенном выше коде, но поскольку вы специально жаловались на ошибки OOM, я это сделал). другое очевидное решение - увеличить лимит памяти, например

if (false===ini_set("memory_limit","1G")){
    throw new \RuntimeException('error, unable to change memory limit!');
};

должен установить ограничение памяти в 1 гигабайт, по сравнению со 128 мегабайтами по умолчанию.

Другие вопросы по теме