preg_match를 사용하여 HTML 요소와 일치하는 문제가 있습니다

StackOverflow https://stackoverflow.com/questions/2233392

  •  19-09-2019
  •  | 
  •  

문제

나는 HTML 요소와 일치하려고 노력하고 있지만 $ 타이틀이 비어 있기 때문에 일치한다고 생각하지 않습니다. 누구든지 나를 수정할 수 있습니까?

내 preg_match :

   preg_match_all("~<td align=\"left\" width=\"50%\">[^<]*. <b><a href=\"(.*?)\">[^<]*</a>~i", $main, $titles);

일치하는 HTML 예제 :

//<td align="left" width="50%">1. <b><a title="Wat" href="http://www.exmple.com/q.html">Wat</a></b><br></td>

내가 뭔가를 놓치고 있습니까?

도움을 주셔서 감사합니다

도움이 되었습니까?

해결책

일치 할 것이 없습니다 title="Wat" 에서 <a> 꼬리표.

그래도 Regex를 사용하여 구문 분석하지 않는 것이 좋습니다. 나는 PHP에 너무 익숙하지 않지만 이미 대부분의 일을 할 수있는 일이 있다고 확신합니다.

다른 팁

내 의견에서 말했듯이 Regex는 HTML을 구문 분석하려고 할 때 사용하기에 적합한 도구가 거의 없습니다. Zend_dom_Query의 예를 사용하기 위해 Zend_dom_Query의 예를 사용하기 위해 Zend Framework의 ecomponetns 중 하나는 단순히 이러한 질문 중 하나에 대해 권장하지 않았기 때문입니다. 그래서...

$dom = new Zend_Dom_Query($htmlHaystack);
$anchors = $dom->query('//td/a[@title]'); // xpath here
if(count($anchors) > 0)
{
  $titles = array();
  foreach($anchors as $element)
  {
     $titles[] = $element->getAttribute('title');
  }
}
else
{
  $title = null;
}
$string='<td align="left" width="50%">1. <b><a title="Wat" href="http://www.exmple.com/q.html">Wat</a></b><br></td>';
$s = explode("</a>",$string);
foreach($s as $k){
   if (strpos($k,"href")!==FALSE){
        echo preg_replace('/.*href="|">.*/ms',"",$k);
   }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top