Ответы пользователя по тегу Регулярные выражения
  • Паттерн для выборки ссылок сортировкой по заданному домену/анкору?

    abyrvalg
    @abyrvalg
    Вы точно хотите парсить html регэкспами? Одумайтесь, ведь может прийти Он.

    Как-то так, может?

    $doc = new DOMDocument();
    $doc->loadHTML($htmlAsString);
    $links = $doc->getElementsByTagName('a');
    
    function filterByHref(DOMNodeList $anchors, string $hrefRegex): array {
        $links = [];
        /** @var DOMElement $elm */
        foreach ($anchors as $elm) {
            if (! $elm->hasAttribute('href')) {
                continue;
            }
            $link = $elm->getAttribute('href');
            if (preg_match($hrefRegex, $link)) {
                $links[] = $link;
            }
        }
    
        return $links;
    }
    
    var_export([
        'cnt' => $links->length,
        'goo' => filterByHref($links, '|^https://google.com\b|'),
        'link' => filterByHref($links, '|link1|i'),
    ], false);
    Ответ написан
    1 комментарий
  • Регулярные выражения для диапазона IP адресов?

    abyrvalg
    @abyrvalg
    Проверять такие вещи регулярками - в корне неправильно. ИП-адрес - это всего лишь 32-битное целое число. В каждой операционке и почти в каждом языке есть функции для работы с ип-адресами и диапазонами. Пхп не исключение:

    $firstIpAsString = '77.88.0.0';
    $lastIpAsString  = '77.88.0.18';
    $ipAsString      = '77.88.0.111';
    
    $firstIp = ip2long($firstIpAsString);
    $lastIp  = ip2long($lastIpAsString);
    $ip      = ip2long($ipAsString);
    
    var_export([
        'first' => $firstIp,
        'last' => $lastIp,
        'ip' => $ip,
        'in range?' => $firstIp <= $ip && $ip <= $lastIp,
    ], false);
    Ответ написан
    Комментировать