2013-05-18 5 views
0

이 정규식 일치를 수행하고 바꿀 수 있지만 할 수 있지만 노력하고 있습니다.PHP 정규식 - 찾기 및 바꾸기 링크

<a href=one target=home>One</a> 
<a href=two>Two</a> 
<a href=three target=head>Three</a> 
<a href=four>Four</a> 
<a href=five target=foot>Five</a> 

내가

<a href=one target=home>One</a> 

변경

<a href='one'>One</a> 

이 같은 찾기는 A 태그의 각 세트를 발견하고이

같은 교체 할 와 y 태그의 나머지 부분.

도움이 될 것입니다!

+0

저는 regex에 새로운 기능입니다. href에 따옴표를 추가하는 방법을 모르겠습니다. – SchizoBoy

+1

** 정규식을 사용하여 HTML을 구문 분석하지 마십시오 **. 정규식으로 HTML을 안정적으로 구문 분석 할 수는 없으며 슬픔과 좌절을 당할 것입니다. HTML이 예상과 다르게 변경되면 코드가 손상됩니다. 이미 작성, 테스트 및 디버깅 된 PHP 모듈을 사용하여 HTML을 올바르게 구문 분석하는 방법에 대한 예제는 http://htmlparsing.com/php를 참조하십시오. –

답변

1

사용이 : 당신이 정규식을 원하는 경우

preg_replace('/<a(.*)href=(")?([a-zA-Z]+)"? ?(.*)>(.*)<\/a>/', '<a href='$3'>$5</a>', '{{your data}}'); 
+0

작동! 감사합니다 mightyuhu! – SchizoBoy

5

DomDocument()을 사용하면 HTML에서보다 쉽게 ​​작업 할 수 있습니다.

<?php 
    $str = '<a href=one target=home>One</a> 
<a href=two>Two</a> 
<a href=three target=head>Three</a> 
<a href=four>Four</a> 
<a href=five target=foot>Five</a>'; 
    $dom = new DomDocument(); 
    $dom->loadHTML($str); 
    $anchors = $dom->getElementsByTagName('a'); 
    foreach ($anchors as $a) 
    { 
     if ($a->hasAttribute('target')) 
     { 
      $a->removeAttribute('target'); 
     } 
    } 
    $str = $dom->saveHTML(); 

See it in action

+0

감사합니다. 그러나 href에 따옴표가 추가되지는 않습니다. – SchizoBoy

+0

정말입니까? 나는 나의 바이올린에서 인용문을 본다. 그러나 ' $ dom-> formatOutput = true;'를 추가하여 마지막 줄을 찾아보고 도움이되는지 확인하십시오. –

+0

죄송합니다, 바로 당신입니다! 존 감사합니다. – SchizoBoy

0

,이 시도 :

$str = preg_replace('/<a [^>]*href=([^\'" ]+) ?[^>]*>/',"<a href='\1'>",$str); 

나는이 작업을 수행하는 정규 표현식을 사용하지 않는 것이 좋습니다 그래도.

+0

답변 해 주셔서 감사합니다. – SchizoBoy

관련 문제