2009-09-13 9 views
0

src html 속성을 바꾸려면 정규 표현식을 사용하고 싶습니다. 즉HTML 태그의 이미지 src 바꾸기?

<img src="http://x.y/z/1.png" /> 

내가 페이지에 하나의 이미지가 있다면 잘 작동 코드가 - HTML의 형식이 잘못되지 않으며 다행히 데이터베이스의 모든 페이지에서 동일한 형식을 취합니다. 여러 이미지를 대체하는 가장 좋은 방법을 알고 싶습니다.이 이미지 태그는 모든 이미지 태그를 동일한 문자열로 바꿀 것이기 때문입니다.

$result = $s->db_query("SELECT reviewFullText as f FROM reviews WHERE reviewsID = 155"); 
while($row = mysql_fetch_array($result)) 
{ 
    $body = stripslashes(html_entity_decode($row['f'], ENT_NOQUOTES, "UTF-8")); 
    preg_match_all('/<img.*?(src\=[\'|"]{0,1}.*?[\'|"]{0,1})[\s|>]{1}/i', $body, $matches); 
    for($i=0;$i<count($matches[0]);$i++) 
    { 
     $number = preg_replace("/[^0-9]/", '', $matches[0][$i]); 
     echo preg_replace('/<img.*?(src\=[\'|"]{0,1}.*?[\'|"]{0,1})[\s|>]{1}/i', '<img src="http://x.y/a/' . $number . '.png"', $matches[0][$i]); 
    } 
} 

그래서 페이지는 두 개의 파일 하나라고 1.png와 숫자를 구문 분석 및 http://x.y/a/1.pnghttp://x.y/a/2.png 같은 다른 URL로 대체해야 스크립트를 2.png라는 하나가 포함되어있는 경우.

나는이 작업을 수행하는 가장 좋은 방법은 preg_replace_callback이라고 들었지만이 작업을하는 방법을 알지 못합니다 ... Help!

+0

http://stackoverflow.com/questions/1416425/preg-replace-preg-match-for-href-in-html-link – TrueWill

+0

에 유사한 질문 [가능한 이유에 대한 몇 가지 예를 제공 할 수 있습니까? XML과 HTML을 정규식으로 구문 분석 할 수 있습니까?] (http://stackoverflow.com/questions/701166/can-you-provide-some-examples-of-why-it-is-hard-to-parse-xml-and -html-with-agege) –

+0

가능한 [XHTML 자체 포함 태그를 제외한 RegEx 일치하는 태그] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml- 자체 포함 태그) –

답변

14

Don't use regular expressions for irregular languages like HTML. 대신 parser을 사용하십시오. 그것은 당신에게 많은 시간과 고통을 덜어 줄 것입니다. 당신의 HTML을 XHTML이 (즉, 유효한 XML)이 아니라, 아이디어는 동일하게 유지됩니다 경우, DOMDocument::loadHtml() 같은 것을해야합니다

# Untested code: 
$xml = new SimpleXml($xmlString); 
foreach ($xml->xpath('//img') as $imgNode) { 
    $imgNode->addAttribute('src', "http://x.y/a/" . $imgNode->getAttribute('src')); 
} 
echo $xml->asXML(); 

참고.

+0

+1 정규식은 [X] [HT] ML 처리에 적합하지 않습니다. 그러나 XPath가'// img '가 아니어야합니까? DOM getElementsByTagName도 제대로 작동합니다. 원본 코드에서 전체 문서에 대해 'stripslashes (html_entity_decode())'가 무엇을 달성해야하는지 알지 못합니다. 이것은 문서를 mangle 것입니다. – bobince

+0

@bobince : '// img'오류를 지적 해 주셔서 감사합니다. 나는'stripslashes (...'부분은 문서의 저장/검색이 재 디자인을 필요로한다는 좋은 징후일지도 모르는 값을 '새 니타 이징'하는 것)이라고 생각합니다. – soulmerge

+0

-1 특정 질문을 무시합니다. 규칙, 당신은 regexp를 사용하고 싶지 않지만, 그는 분명히 그가 바꾸고 싶어하는 모든 요소가 똑같이 보인다고 말했습니다. 그래서이 경우에는 regexp가 더 나은 해결책입니다. – amitkaz

1

정규 표현식에서 전역 대체 플래그 "g"를 추가하십시오.

'/ your_regex/Ig'는 HTML 형식이 잘못하지 않기 때문에 soulmerge이 제안한 것처럼

가 (난 당신 말은 생각이 잘 구성된 XML입니다), XSLT 변환을 변경 할 수있는 효과적인 방법이 될 것입니다 귀하의 문서에있는 것도 있습니다. @src 속성에서 일치시킬 수 있으며 요구 사항에 따라 변경할 수 있습니다.

문서의 다른 부분을 동시에 변경해야하는 경우 다른 태그/속성과도 일치시킬 수 있습니다.

관련 문제