2013-04-08 2 views
0

내부에 많은 단어를 대체하기는 preg_match 또는 REGX를 사용html로

  <span xmlns:v="http://rdf.data-vocabulary.org/#"> 
       <span typeof="v:Breadcrumb"> 
        <a href="http://link1.com/" rel="v:url" property="v:title">Home</a> 
       </span> 
       /
       <span typeof="v:Breadcrumb"> 
        <a href="http://link2.com/" rel="v:url" property="v:title">Child 2</a> 
       </span> 
       /
       <span typeof="v:Breadcrumb"> 
        <a href="http://link3.com/" rel="v:url" property="v:title">Child 3</a> 
       </span> 
       /
       <span typeof="v:Breadcrumb"> 
        <span class="breadcrumb_last" property="v:title">Child 4</span> 
       </span> 
      </span> 

PHP로
  <span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"> 
       <span typeof="v:Breadcrumb"> 
        <a href="http://link1.com/" itemprop="url"> 
         <span itemprop="title">Home</span> 
        </a> 
       </span> 
       /
       <span typeof="v:Breadcrumb"> 
        <a href="http://link2.com/" itemprop="url"> 
         <span itemprop="title">Child 2</span> 
        </a> 
       </span> 
       /
       <span typeof="v:Breadcrumb"> 
        <a href="http://link3.com/" itemprop="url"> 
         <span itemprop="title">Child 3</span> 
        </a> 
       </span> 
       /
       <span> 
        <span class="breadcrumb_last"> 
         <span itemprop="title">Child 4</span> 
        </span> 
       </span> 
      </span> 

에 다음 형식의 HTML로 변환하는 나를 위해 좋은 해결책이 있습니까? RDFa의 빵 덩어리 구조를 Microdata로 변환하고 싶습니다.

+3

정규식 HTML 구문 분석은 삼가 해 주시기 바랍니다 (http://stackoverflow.com/questions/을 : 참조), 당신은 jQuery를 JS 프레임 워크를 사용하는 경우,이 도구를 사용하면 쉽게 될 것입니다 1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454 # 1732454). 대신 [HTML 구문 분석기] (http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php)를 사용하십시오. –

+0

@MadaraUchiha : RDFa 데이터는 워드 프레스 자체에서 얻을 수 있습니다. 그래서 나는 단지이 목적을 위해서 html 파서를로드 할 수 없다. –

+1

왜 HTML 파서를 사용하는 것을 중단하겠습니까? ['DOMDocument'] (http://php.net/domdocument), 일을 끝냈습니다. – DaveRandom

답변

1

정규 표현식과 솔루션은, 이것이 당신의 예제 코드와 함께 작동 도움을 주셔서 감사합니다,하지만 속성 순서가 변경 될 때 실패합니다 : 가능한 경우, 항상 HTML/XML 파싱 할 때 생각

$pattern = '#(?:rel\=\"v\:url\"\)? property\=\"v\:title\"\>([^\<]*)\<#ui'; 
$replacement = ' itemprop="url"><span itemprop="title">$1</span><'; 
$output = preg_replace($pattern,$replacement,$original); 

당신은 HTML/XML 소스를 조작하고 싶습니다. 여기에 강력한 도구가 있습니다 : https://code.google.com/p/phpquery/. 이 [당신 į̷̷͚̤̤̖̦͍͗̒̈̅̄n̨͖͓̹͍͎͔͈̝͐ͪ͛̄͛ṣ̷̵̞̦ͤ̅̉̋ͪ͑͛ͥ͜a̷̘͖̮͔͎͛̇̏̒͆̆͘n͇͔̤̼͙̩͖̭ͤ͋̉͌͟eͥ͒͆ͧͨ̽͞҉̹͍̳̻͢ 드라이브]하므로

require_once 'phpquery/phpQuery.php'; 
$dom = phpQuery::newDocument($original); 
foreach($dom->find('a[rel="v:url"]') as &$item){ 
    $txt = $this->text(); 
    $item-> 
     removeAttr('rel')-> 
     removeAttr('property')-> 
     attr('itemprop','url')-> 
     html("<span itemprop=\"title\">$txt</span>");   
} 
$output = "$original";