Я использую регулярное выражение, чтобы сначала извлечь 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]);
}
Я думаю, что вы можете извлечь домен также в первом цикле.
с таким регулярным выражением:
/(?:https?\:\/\/|www)([^\/ ]+)[^(\"|\\\) ]+/i'
увидеть : https://regex101.com/r/rUGOtj/1
где ([^\/ ]+)
является подходящей группой для вашего домена.
И вы можете получить доступ к этой группе совпадений с помощью $ match [$ i] [1]
Других решений пока нет …