2011-04-18 2 views
1

문자열에서 href를 모두 검색하는 함수를 만들려고합니다. 제목이 설정되어 있지 않으면 텍스트 값으로 바꾸어야합니다. > text </a> 제목이없는 PHP 정규식 href

$s = preg_replace('/< a[^>]*?href=[\'"](.*?)[\'"][^>]*?title=[\'"](.*?)[\'"][^>]*?>(.*?)<\/a>/si','< a href="$1" title="$2">$3</a>',$s); 

가 어떻게 $ 2로 설정되어 있는지 확인하기 위해 정규식에서 확인할 수 있으며 또한 $ 3 $ 3로 교체되지 않은 경우 : 'T는 그것을 할 수있는 가장 좋은 방법은 같은 것을 생각하고, 무엇을 알고 img src = "..."alt = "..."와 같을 수 있으며이 경우 alt 값을 얻고 싶습니다.

우선 PHP로 어떻게 할 수 있는지 알고 싶습니다.하지만 도움이 필요합니다.

+0

가능한 중복 [정규식이 하이퍼 링크 및 설명을 구문 분석] (HTTP : // 유래 .com/questions/26323/regex-to-parse- 하이퍼 링크 및 설명) – jeroen

+2

[Obligatory ...] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml -self-contained-tags/1732454 # 1732454) –

+0

그가 오면 그는 온다. –

답변

0

은 아마이 설정 될 것 만 title=''을 찾아되지 않는 가정 :

$preg_replace("/<a[^>]*?href=[\'\"](.*?)[\'\"][^>]*?title=''>(.*?)<\/a>/i","<a href='$1' title='$2'>$2</a>","<a href='http://google.com' title=''>Google</a>"); 

출력 :

<a href='http://google.com' title='Google'>Google</a> 

행운을 빕니다.

편집

죄송합니다, 당신이 무슨 뜻인지 너무 확실하지 :

는 $ 3 = "..."고도 SRC을 IMG 같은 "..."할 수 있으며에서 이 경우 alt 값을 얻고 싶습니다.

예를 들어 링크 텍스트가 $3이 아닙니까?

0

정보가없는 링크는 여기에 적합합니다. 그것은 regexpressions로 쉽게 할 수 없습니다. 예를 들어, title=<img alt= 속성을 비교하기 위해 역방향 참조가 적용된 (?!\4) 제외 어설 션을 사용할 수 없습니다 (이미 추출하기가 어려움).

최소한 preg_replace_callback을 사용해야하며 별도의 기능으로 교체를 처리해야합니다. 속성을 분리하고 alt = title과 비교하는 것이 더 쉽습니다.

출력 재 작성을 위해 이것을 사용하지 않는 경우 regexpressions를 사용하지 않음으로써 작업을 단순화하십시오. 이는 성능 측면에서 더 나은 선택이 아니라 실행하기 쉽도록하는 것입니다. phpQuery 또는 QueryPath :

$qp = qp($html); 
foreach ($qp->find("a") as $a) { 
    $title = $a->attr("title"); 
    $alt = $a->find("img")->attr("$title"); 
    if (!$title) { $a->attr("title", $alt); } 
} 
$html = $qp->top()->writeHtml(); 

(같은이있는 DOMDocument를 사용하여 만 더 정교한 코드, 수행 할 수 있습니다 ...)의