preg_match_all для ссылок на веб-сайте

Может, кто-нибудь покажет мне, как использовать preg_match_all для захвата ссылок в списке, где целевая веб-страница находится на том же веб-сайте? Все ссылки, которые я пытаюсь получить в результатах поиска, выглядят так:

<a href="/">Home</a>
<a href="/about-us">About Us</a>
<a href="/contact-us">Contact Us</a>

Примеры ссылок, которые я не хочу включать в результаты:

<a href="http://www.facebook.com">Visit Us On Facebook</a>
<a href="https://www.paypal.com">Pay Now</a>

Я потратил час на поиск в Интернете и нашел только примеры, которые показывают все ссылки на веб-странице, не исключая тот же веб-сайт.

Спасибо.

1

Решение

Вы можете попробовать приведенное ниже регулярное выражение, чтобы сопоставить все теги привязки, в которых содержимое его атрибута href начинается с / условное обозначение.

<a href="(\/[^"]*)">[^<>]*<\/a>

DEMO

Код:

<?php
$string = <<<EOT
<a href="/">Home</a>
<a href="/about-us">About Us</a>
<a href="/contact-us">Contact Us</a>
<a href="http://www.facebook.com">Visit Us On Facebook</a>
<a href="https://www.paypal.com">Pay Now</a>
EOT;
echo preg_match_all('~<a href="(\/[^"]*)">[^<>]*<\/a>~', $string, $matches);
print_r($matches[0]);
print_r($matches[1]);
?>

Выход:

3Array
(
[0] => <a href="/">Home</a>
[1] => <a href="/about-us">About Us</a>
[2] => <a href="/contact-us">Contact Us</a>
)
Array
(
[0] => /
[1] => /about-us
[2] => /contact-us
)
1

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

Вот решение с использованием DOM

$dom = DOMDocument::loadHTML('
<a href="/">Home</a>
<a href="/about-us">About Us</a>
<a href="/contact-us">Contact Us</a>
<a href="http://www.facebook.com">Visit Us On Facebook</a>
<a href="https://www.paypal.com">Pay Now</a>
');

$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//a[substring(@href, 1, 1) = "/"]');

foreach ($nodes as $node) {
$links[] = $node->getAttribute('href');
}
print_r($links);

Код Демо

Вы также можете использовать preg_match() функция с DOM.

$xpath = new DOMXPath($dom);

$xpath->registerNamespace('php', 'http://php.net/xpath');
$xpath->registerPHPFunctions('preg_match');

$nodes = $xpath->evaluate("//a[php:functionString('preg_match', '~^/~', @href)=1]");

foreach ($nodes as $node) {
$links[] = $node->getAttribute('href');
}
print_r($links);

Код Демо

3

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