Проблема во время выполнения — Regex URLs до 150 тыс. Строк текста.

Я использую регулярное выражение, чтобы сначала извлечь URL из некоторого файла. Файл может содержать до 250 тыс. Строк текста. Каждая строка в файле передается значению массива $column7, Ниже длится намного дольше, чем я надеялся. Извлечение URL-адресов для строк из 20 тыс. Может занять до 1 минуты, а извлечение доменов может занять в два-три раза больше времени, что не имеет смысла для меня, поскольку в качестве входных данных используются результаты URL-адреса, поэтому я ожидал, что они будут быстрее , Что я могу сделать, чтобы значительно ускорить это?

// EXTRACT URLS
$regex = '/(https?\:\/\/|www)[^(\"|\\\) ]+/i';
$urls = array();
for ($i = 0; $i < count($column7); ++$i) {
preg_match_all($regex, $column7[$i], $matches[$i]);
$urls = array_merge($urls, $matches[$i][0]);
}

// EXTRACT DOMAINS
$regex = '/(https?\:\/\/|www)[^\/ ]+/i';
$domains = array();
for ($i = 0; $i < count($urls); ++$i) {
preg_match_all($regex, $urls[$i], $matches[$i]);
$domains = array_merge($domains, $matches[$i][0]);
}

1

Решение

Я думаю, что вы можете извлечь домен также в первом цикле.

с таким регулярным выражением:

/(?:https?\:\/\/|www)([^\/ ]+)[^(\"|\\\) ]+/i'

увидеть : https://regex101.com/r/rUGOtj/1

где ([^\/ ]+) является подходящей группой для вашего домена.

И вы можете получить доступ к этой группе совпадений с помощью $ match [$ i] [1]

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]