PHP로 콘텐츠에서 URL을 찾는 방법은 무엇입니까?
-
11-09-2019 - |
문제
콘텐츠에서 "c.aspx"(따옴표 제외)를 찾으면 전체 URL을 반환하는 간단한 preg_match가 필요합니다.예를 들어
$content = '<div>[4]<a href="/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212">New message</a><br/>';
이제 $content에서 "c.aspx"를 preg_match해야 하며 다음과 같이 출력됩니다.
"/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212"
$content에는 "c.aspx"를 제외한 더 많은 링크가 있어야 합니다.나는 그들을 원하지 않습니다."c.aspx"가 있는 모든 URL만 원합니다.
어떻게 하면 되는지 알려주세요.
해결책
당신은 dom을 사용하여 html을 구문 분석하지 않고 regex가 아닙니다. Regex를 사용하여 속성 값을 구문 분석 할 수 있습니다.
편집 : C.ASPX를 확인하여 업데이트 된 예제.
$content = '<div>[4]<a href="/m/c.aspx?mt=01_9310ba801f1255e02e411d8a7ed53ef95235165ee4fb0226f9644d439c11039f%7c8acc31aea5ad3998&n=783622212">New message</a>
<a href="#bar">foo</a>
<br/>';
$dom = new DOMDocument();
$dom->loadHTML($content);
$anchors = $dom->getElementsByTagName('a');
if ( count($anchors->length) > 0 ) {
foreach ( $anchors as $anchor ) {
if ( $anchor->hasAttribute('href') ) {
$link = $anchor->getAttribute('href');
if ( strpos( $link, 'c.aspx') ) {
echo $link;
}
}
}
}
다른 팁
c.aspx가 포함된 인용 문자열을 찾으려면 다음을 수행하세요.
/"[^"]*c\.aspx[^"]*"|'[^']*c\.aspx[^']*'/
그러나 실제로 대부분의 HTML을 구문 분석하려면 일치하는 항목이 실제로 href인지 확인할 수 있도록 일종의 DOM 구문 분석기를 사용하는 것이 더 나을 것입니다.
제휴하지 않습니다 StackOverflow