не анализировать 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 мегабайтами по умолчанию.