A 요소의 href 속성 가져 오기
PHPA 요소의 href 속성 가져 오기
한 페이지에서 링크를 찾으려고합니다.
내 정규식은 :
/<a\s[^>]*href=(\"\'??)([^\"\' >]*?)[^>]*>(.*)<\/a>/
그러나 실패로 보인다.
<a title="this" href="that">what?</a>
어떻게하면 정규식 태그를 href로 처리 할 수 있습니까?
해결법
-
==============================
1.
신뢰할 수있는 HTML 용 정규 표현식은 어렵습니다. 다음은 DOM을 사용하는 방법입니다.
$dom = new DOMDocument; $dom->loadHTML($html); foreach ($dom->getElementsByTagName('a') as $node) { echo $dom->saveHtml($node), PHP_EOL; }
위의 코드는 $ html 문자열에있는 모든 A 요소의 "outerHTML"을 찾아 출력합니다.
노드의 모든 텍스트 값을 가져 오려면 다음을 수행하십시오.
echo $node->nodeValue;
할 수있는 href 속성이 있는지 확인하려면
echo $node->hasAttribute( 'href' );
href 속성을 얻으려면
echo $node->getAttribute( 'href' );
href 속성을 변경하려면
$node->setAttribute('href', 'something else');
href 속성을 삭제하려면
$node->removeAttribute('href');
XPath로 href 속성을 직접 질의 할 수도있다.
$dom = new DOMDocument; $dom->loadHTML($html); $xpath = new DOMXPath($dom); $nodes = $xpath->query('//a/@href'); foreach($nodes as $href) { echo $href->nodeValue; // echo current attribute value $href->nodeValue = 'new value'; // set new attribute value $href->parentNode->removeAttribute('href'); // remove attribute }
참조 :
sidenote에서 : 저는 이것이 중복 된 것이고 여기 어딘가에 답을 찾을 수 있다고 확신합니다.
-
==============================
2.
고든 (Gordon)에 동의합니다. HTML 파서를 사용하려면 반드시 HTML 파서를 사용해야합니다. 그러나 당신이 정말로 정규 표현식을 원한다면 이것을 시도 할 수 있습니다 :
/^<a.*?href=(["\'])(.*?)\1.*$/
-
==============================
3.
찾으려는 패턴은 (뭔가)와 같이 링크 앵커 패턴이됩니다.
$regex_pattern = "/<a href=\"(.*)\">(.*)<\/a>/";
-
==============================
4.
왜 너는 일치하지 않는거야?
"<a.*?href\s*=\s*['"](.*?)['"]" <?php $str = '<a title="this" href="that">what?</a>'; $res = array(); preg_match_all("/<a.*?href\s*=\s*['\"](.*?)['\"]/", $str, $res); var_dump($res); ?>
그때
$ php test.php array(2) { [0]=> array(1) { [0]=> string(27) "<a title="this" href="that"" } [1]=> array(1) { [0]=> string(4) "that" } }
어떤 작품. 방금 첫 번째 괄호를 제거했습니다.
-
==============================
5.
나는 당신이 여기서 무엇을하려고하는지 잘 모르겠다. 그러나 링크를 검증하려고한다면 PHP의 filter_var ()를 보라.
정규 표현식을 사용하여이 도구를 체크 아웃해야한다면 다음과 같이하면 도움이 될 것입니다. http://regex.larsolavtorvik.com/
-
==============================
6.
귀하의 정규식을 사용하여, 나는 당신의 필요에 맞게 조금 그것을 수정했습니다.
. *? href = ( "| ') (. *?) ("|'). *?>
개인적으로 HTML 파서를 사용하는 것이 좋습니다.
편집 : 테스트 됨
-
==============================
7.
SimpleXML을 사용하여 솔루션을 매우 쉽고 빠르게 얻지 못하는 사람에게
$a = new SimpleXMLElement('<a href="www.something.com">Click here</a>'); echo $a['href']; // will echo www.something.com
나를 위해 일하는
-
==============================
8.
내가 "/"의 첫 번째 경기를 떠난 이유는 그것을 닫는 "/"에 대해 나중에 역 참조하기 위해 사용할 수 있기 때문에 동일합니다.
http://www.rubular.com/r/jsKyK2b6do에서 실시간 예제를 참조하십시오.
-
==============================
9.
preg_match_all ( "/(]>)(.?)( a) /", $ contents, $ impmatches, PREG_SET_ORDER);
그것은 테스트 및 모든 HTML 코드에서 모든 태그를 가져옵니다.
from https://stackoverflow.com/questions/3820666/grabbing-the-href-attribute-of-an-a-element by cc-by-sa and MIT lisence
'PHP' 카테고리의 다른 글
예를 들어 PHP에서 1 일 전, 2 일 전에 타임 스탬프를 시간으로 변환하는 중 ... (0) | 2018.09.02 |
---|---|
경고 : mysql_fetch_array () : 제공된 인수가 유효한 MySQL 결과가 아닙니다. (0) | 2018.09.02 |
참조 - PDO에 대해 자주 묻는 질문 (0) | 2018.09.02 |
다차원 배열을 단순화하는 방법? (0) | 2018.09.02 |
PHP에서 다차원 배열에서 중복 값을 제거하는 방법 (0) | 2018.09.02 |