我一直在尝试做一个正则表达式来匹配和替换HTML一部分上关键字的出现:
keyword
<strong>keyword</strong>
<a href="someurl.html" target="_blank">keyword</a>
<a href="someur2.html">already linked keyword </a>
我只对keyword第一行的匹配(和替换)感兴趣。
我想要此操作的原因是将其替换keyword为<a href="dictionary.php?k=keyword">keyword</s>,但仅当keyword它尚未位于<a>标记中时才可以。
<a href="dictionary.php?k=keyword">keyword</s>
<a>
任何帮助都感激不尽!
我设法通过以下方式完成了我想做的事情( 不使用Regex ):
str_replace
如果有人需要,这是我使用的代码:
$str = <<<STRA Moses supposes his toeses are roses, but <a href="original-moses1.html">Moses</a> supposes erroneously; for nobody's toeses are posies of roses, as Moses supposes his toeses to be. Ganda <span class="cenas"><a href="original-moses2.html" target="_blank">Moses</a></span>! STRA; $arr1 = str_split($str); $arr_links = array(); $phrase_holder = ''; $current_a = 0; $goto_arr_links = false; $close_a = false; foreach($arr1 as $k => $v) { if ($close_a == true) { if ($v == '>') { $close_a = false; } continue; } if ($goto_arr_links == true) { $arr_links[$current_a] .= $v; } if ($v == '<' && $arr1[$k+1] == 'a') { /* <a */ // keep collecting every char until </a> $arr_links[$current_a] .= $v; $goto_arr_links = true; } elseif ($v == '<' && $arr1[$k+1] == '/' && $arr1[$k+2] == 'a' && $arr1[$k+3] == '>' ) { /* </a> */ $arr_links[$current_a] .= "/a>"; $goto_arr_links = false; $close_a = true; $phrase_holder .= "{%$current_a%}"; /* put a parameter holder on the phrase */ $current_a++; } elseif ($goto_arr_links == false) { $phrase_holder .= $v; } } echo "Links Array:\n"; print_r($arr_links); echo "\n\n\nPhrase Holder:\n"; echo $phrase_holder; echo "\n\n\n(pre) Final Phrase (with my keyword replaced):\n"; $final_phrase = str_replace("Moses", "<a href=\"novo-mega-link.php\">Moses</a>", $phrase_holder); echo $final_phrase; echo "\n\n\nFinal Phrase:\n"; foreach($arr_links as $k => $v) { $final_phrase = str_replace("{%$k%}", $v, $final_phrase); } echo $final_phrase;
输出:
链接数组:
Array ( [0] => <a href="original-moses1.html">Moses</a> [1] => <a href="original-moses2.html" target="_blank">Moses</a> )
词组:
Moses supposes his toeses are roses, but {%0%} supposes erroneously; for nobody's toeses are posies of roses, as Moses supposes his toeses to be. Ganda <span class="cenas">{%1%}</span>!
(上)最终词组(替换为我的关键字):
<a href="novo-mega-link.php">Moses</a> supposes his toeses are roses, but {%0%} supposes erroneously; for nobody's toeses are posies of roses, as <a href="novo-mega-link.php">Moses</a> supposes his toeses to be. Ganda <span class="cenas">{%1%}</span>!
最终词组:
<a href="novo-mega-link.php">Moses</a> supposes his toeses are roses, but <a href="original-moses1.html">Moses</a> supposes erroneously; for nobody's toeses are posies of roses, as <a href="novo-mega-link.php">Moses</a> supposes his toeses to be. Ganda <span class="cenas"><a href="original-moses2.html" target="_blank">Moses</a></span>!