2011-01-26 2 views
1

내가 PHP의 preg-match-all 기능을 사용하여 일부 HTML 콘텐츠를 분할하기 위해 노력하고있어 나열 내가 예를 들어, 링크 설명을 변경할 수 있도록하려면PHP : 분할 목록 항목 및 아이

<li class="cat-item"><a title="blabla" href="#">parent 1</a> 
    <ul class="children"> 
     <li class="cat-item"><a title="" href="#">child 1</a></li> 
    </ul> 
</li> 
<li class="cat-item cat-item-4"><a title="blabla" href="#">father 2</a> 
    <ul class="children"> 
     <li class="cat-item"><a title="" href="#">child 1</a></li> 
     <li class="cat-item"><a title="bla" href="#">child 2</a></li> 
    </ul> 
</li> 

을;

<a title="" href="#">child 1</a> 

HTML 원래의 구조를 유지하면서

<a title="" href="#">I changed that</a> 

한다. 지금까지, 내가 사용 링크를 분할 성공 :

$results = preg_match_all('/<a\s[^>]*href\s*=\s*(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>/siU', $html, $tokens); 

foreach ($tokens[0] as $category) 
{ 
    echo $category.'<br>'; 
} 

이의 단점은 그것이 자식 목록을 삭제하고, 같은 수준에있는 모든 목록 항목을 출력하는 것입니다; 부모와 아이 사이의 구별 없음.

원래의 계층 구조를 유지하기위한 아이디어가 있습니까?

고맙습니다 :)

+0

정규 표현식에 대해 매우 어려운 작업인데,이 경우 HTML 구문 분석기를 사용하는 것이 더 좋을 것입니다. (저는 매우 pro-regexp이고 일반적으로 구석에 맞서 싸우지 만 이런 종류의 둥지 짓기의 힘든 투쟁이다). 앵커에게 정확히 무엇을 넣으시겠습니까? – Orbling

+0

thanx Orbling, 나는 regexp가 html을 파싱 할 때 올바른 방법이 아니라는 것에 동의한다. domDocument를 가지고 놀기 시작했지만 지금까지는 내 포인트에 도달하지 못했다. 내가 원하는 것은 wordpress의 wp_list_categories() 함수와 관련이있다. ; 에코 결과를 번역해야합니다. 이 함수는 배열이나 객체의 반환 값을 가지고 있지 않지만 오직 echo :(그래서 나는 그것에 대한 dummyy 픽스를 만들려고 노력한다. :) – numediaweb

답변

0

사용 preg_replace이다 문자열을 대체하기! 여기에이 같은 :. $ 1, $ 2는 정규식 검색 및 그룹화 한 것입니다

$output = preg_replace("/^([123]0|[012][1-9]|31)(\\.|-|\/|,)(0[1-9]|1[012])(\\.|-|\/)(19[0-9]{2}|2[0-9]{3})$/","$1",$in_nn_date); 

최고의 당신이 this one

같은 일부 온라인 편집기 또는 뭔가 ...를 사용하는 것

그리고 시도해보십시오! 그것이 도움이되기를 바랍니다 ...

+0

고맙습니다. FeRtoll, 제가 이것을 해결하기 위해 정규 표현식 이상을 필요로한다고 생각합니다. 원래의 출력 계층 구조를 다시 만들어야합니다. – numediaweb