У меня есть этот бит php
который извлекает все URL-адреса со страницы:
$regex = '/https?\:\/\/[^\" ]+/i'; preg_match_all($regex, $page, $matches); $links = ($matches[0]); foreach($links as $link) { echo $link.'<br />'; }
Как мне изменить его, чтобы извлечь не все ссылки, а только те, которые соответствуют определенному частичному URL-адресу, в данном случае: « http://www.site.com/artist/ », где результат, который я ищу, – это список, подобный :
http://www.site.com/artist/Nirvana/
http://www.site.com/artist/Jayz/
И так далее.
Изменяя разделители на восклицательные знаки, нет необходимости в дополнительных символах эвакуации. Класс символов \s
сопоставляет символы пробелов, такие как вкладки, пробелы и новые строки. Я также убеждаюсь, что мы охватываем оба типа котировок (в случае изменения страницы).
$regex = '!https?://www.site.com/artist/[^\'"\s]+!i'; preg_match_all($regex, $page, $matches); $links = ($matches[0]); foreach($links as $link) { echo $link.'<br />'; }
$regex = 'http:\/\/www.site.com\/artist\/[^" ]+\/';
Конечно, что происходит после того, как часть artist
зависит от того, что считается приемлемым.
Если вы принимаете только буквы и цифры, просто используйте [a-zA-Z0-9]+
.
Где эти URL-адреса? Они на веб-странице? Попробуй это:
http://www.site.com/artist/ . * \ b
ОБНОВЛЕНИЕ 1:
Если вы используете PHP, попробуйте следующее:
preg_match_all('%http://www\.site\.com/artist/.*\b%', $html, $urls, PREG_PATTERN_ORDER); $urls = $urls[0];