이미지 요소를 묶는 HTML 앵커 요소 세트가 있습니다. 각 세트에 대해 PHP-CLI를 사용하여 URL을 가져 와서 유형에 따라 분류하려고합니다. 앵커 유형은 자식 이미지 요소의 속성에 의해서만 결정될 수 있습니다. 세트 당 각 유형 중 하나만 있으면 쉽게 될 것입니다. 내 문제는 한 유형의 앵커 요소 두 개가 다른 유형 중 하나 이상으로 분리 된 경우입니다. 욕심이없는 괄호로 묶인 하위 패턴은 탐욕스럽게 느껴지고 두 번째 관련 하위 속성을 찾기 위해 확장됩니다. 내 테스트 스크립트에서 나는 다른 유형의 'Userlink'URL을 가져 오려고합니다. 같은 세트에내부 HTML 요소의 속성으로 식별되는 앵커 요소를 구별하기 위해 PHP preg_match_all을 어떻게 사용합니까?
#<a href="(.*?)" custattr="value1"><img alt="Userlink"#
: 같은 간단한 패턴을 사용하여
<li><a href="http://www.userlink1.com/my/page.html" custattr="value1"><img alt="Userlink" class="common_link_class" height="123" src="pic0.png" width="123" style="width: 123px;"></a></li><li><a href="http://www.socnet1.com/username1" custattr="value1"><img alt="Socnet1" class="common_link_class" height="123" src="pic1.png" width="123" style="width: 123px;"></a></li><li><a href="http://www.socnet2.com/username1" custattr="value1"><img alt="Socnet2" class="common_link_class" height="123" src="pic2.png" width="123" style="width: 123px;"></a></li><li><a href="mailto:[email protected]" custattr="value1"><img alt="Usermail" class="common_link_class" height="123" src="pic3.png" width="123" style="width: 123px;"></a></li><li><a href="http://www.userlink2.com/my/page.html" custattr="value1"><img alt="Userlink" class="common_link_class" height="123" src="pic4.png" width="123" style="width: 123px;"></a></li>
이 (같은 한 줄에 미안하지만, 실제 HTML입니다)
내 하위 패턴이에서 캡처
첫 번째 "Userlink"URL의 시작부터 마지막 URL의 시작.여러 가지 미리보기를 시도했지만 여기에 모두 나열해야하는지 잘 모르겠습니다. 지금까지 그들은 위에서 설명한 것과 전혀 일치하지 않거나 동일한 결과를 반환했습니다.
여기 내 테스트 스크립트 (배쉬 쉘에서 실행)입니다 :
#!/usr/bin/php
<?
$lines = 0;
$input = "";
$matches = array();
while ($line = fgets(STDIN)){
$input .= $line;
$lines++;
}
fwrite(STDERR, "Processing $lines\n");
$pcre = '#<a href="(.*?)" custattr="value1"><img alt="Userlink"#';
if (preg_match_all($pcre,$input,$matches)){
fwrite(STDERR, "\$matches has " . count($matches) . " elements\n");
foreach ($matches[1] as $match){
fwrite(STDOUT, $match . "\n");
}
}
?>
PHP의으로, preg_match_all에 대한 어떤 PCRE 패턴() 위의 예에서 두 개의 "Userlink"URL을 반환?
[** HTML을 regex **로 구문 분석하지 마십시오.] (http://stackoverflow.com/a/1732454/2057919). 파서를 사용하십시오. –
ungreedy'. *? '대신 greedy 문자 클래스'[^ "] *'를 사용하십시오. –
이 * ^?! # 링크가있는 Ed Cottrell은 href 내용 만 찾고 싶다면 DOM 좋은 옵션이 될 수 있습니다. –