Denis5
Постоялец
- Регистрация
- 2 Сен 2008
- Сообщения
- 98
- Реакции
- 23
А в 12 посте чем не устраивает?
Мне внешние нужны.
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
А в 12 посте чем не устраивает?
(?xi)
<a\b(?>\s*\b[a-z]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^<>'"\s]+)))*
\s*\bhref\s*=\s*(?|
"(?!https?://(?:www\.)?somesite\.ru)([^"]*)"|
'(?!https?://(?:www\.)?somesite\.ru)([^']*)'|
(?!https?://(?:www\.)?somesite\.ru)([^<>'"\s]+)
)
$host = "yandex.ru";
$host = str_replace('.', '\.', $host);
$regex = '(?xi)
<a\b(?>\s*\b[a-z]+(?:\s*=\s*(?:"[^"]*"|\'[^\']*\'|[^<>\'"\s]+)))*
\s*\bhref\s*=\s*(?|
"(?!https?://(?:www\.)?'.$host.')([^"]*)"|
\'(?!https?://(?:www\.)?'.$host.')([^\']*)\'|
(?!https?://(?:www\.)?'.$host.')([^<>\'"\s]+)
)';
preg_match_all($regex, $data, $array);
print_r($array);
<?php
$host = "yandex.ru";
$host = preg_quote($host,'%');
$regex = '%
<a\b(?>\s*\b[a-z]+(?:\s*=\s*(?:"[^"]*"|\'[^\']*\'|[^<>\'"\s]+)))*
\s*\bhref\s*=\s*(?|
"(?!https?://(?:www\.)?'.$host.')([^"]*)"|
\'(?!https?://(?:www\.)?'.$host.')([^\']*)\'|
(?!https?://(?:www\.)?'.$host.')([^<>\'"\s]+)
)%xi';
<a\b(?>\s*\b[a-z]+(?:\s*=\s*(?:"[^"]*"|'[^\']*'|[^<>\'"\s]+)))*
\s*\bhref\s*=\s*(?|
"(?!https?://(?:www\.)?site\.ru)([a-z]+://[^"]*)"|
'(?!https?://(?:www\.)?site\.ru)([a-z]+://[^\']*)'|
(?!https?://(?:www\.)?site\.ru)([a-z]+://[^<>\'"\s]+)
)
Denis5
На мой взгляд, лучше сделать двумя регулярками попроще, чем одной большой. Как правило этот варинат производительнее.
Я предлагаю, сначала вытянуть все ссылки в массив, а потом пройтись по нему твоими ограничивающими условиями и повыкидывать элементы массива. Т.к. эти проверки уже можно будет делать не регуляркой, а простыми быстрыми функциями поиска подстроки.
$result = file_get_contents('http://intv.ru');
preg_match_all('#<a href="/view/(.)film(.)id=[0-9]*"><span class="title">(.*?)</span>#si', $result, $out);
for ($i=0; $i < count($out[0]); $i++) {
echo $out[0][$i] . "<br>";
}