2014-04-09 3 views
0

간단한 작업을 수행하려고하는데 실패했습니다. PHP에서 preg_replace를 사용하여 키워드가 링크가되도록하고 싶지만 삽입하고 싶지 않습니다. 제목에.Preg 단어가 헤더 안에없는 경우 바꾸기

내 실제 preg_replace이다 :

$data_replace = '<a href="'.$link.'">$1</a>'; 
$word_to_replace = "keyword"; 
$data_source = "<h1>keyword</h1><p>keyword</p>" 
$pattern = "/\\b(?!<h[0-6]*\>)(.*?)(" . trim($word_to_replace) . ")(.*?)(?!<\/h[0-6]>)\\b/"; 
preg_replace($pattern, $data_replace, $data_source, 1); 

내가 싶어 : 지금은

<h1>keyword</h1><p><a href="http://...">keyword</a></p> 

, 내 출력을 제공합니다 : 내 정규식 패턴에서 내가 잘못 생각

<h1><a href="http://...">keyword</a></h1><p>keyword</p> 

? 감사합니다.

+0

[HTML을 파싱하려면 정규식을 사용하지 않아야합니다] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454), 대신 [DOM parser] (http://www.php.net/manual/en/class.domdocument.php)를 사용하십시오. – Sam

+0

알아요.하지만 제 지식에 대한 답을 알고 싶습니다. :) –

답변

1

이 시도 :

<?php 

$data_replace = '<a href="'.$link.'">$1</a>'; 
$words = ["keyword","foo"]; 
$out = "<h1>keyword</h1><p>keyword</p>"; 
foreach ($words as $word){ 
    $pattern = "/(<[^h].*?>)($word)(<\/)/"; 
    $out = preg_replace($pattern, "\\1<a href=\"#\">$word</a>\\3", $out); 
} 
var_dump($out); 

가 생산 :

dejavu:~ jancha$ php -q aa.php 
string(46) "<h1>keyword</h1><p><a href="#">keyword</a></p>" 

추신을 여러 키워드에 대한 기능이 향상되었습니다.

+0

그리고 저는 PHP에서 [ '1', '2']를 사용할 수 있다는 것을 배웠습니다. 고마워요! –

관련 문제