2014-07-11 86 views

回答

4

(* SKIP)(* F)魔術

$replaced = preg_replace('~"[^"]+"(*SKIP)(*F)|:D~', '^', $yourstring); 

the demo,看到的取代在底部窗格中。

這個問題是該技術的一個經典案例在這個問題解釋"regex-match a pattern, excluding..."

交替的左側|比賽完全"quotes"然後故意失敗,發動機之後跳到字符串中的下一個位置。所以報價被中和。右側匹配:D,我們知道它們是正確的,因爲它們沒有與左側表達式匹配。

參考

0

你可以使用一個負前瞻和回顧後

(?<!\"):D(?!\") 

它匹配:D前面沒有"(雙引號),然後是"。然後匹配的字符由^

<?php 
$string = ':D :D ":D" :D:D:D:D'; 
$pattern = "~(?<!\"):D(?!\")~"; 
$replacement = "^"; 
echo preg_replace($pattern, $replacement, $string); 
?> //=>^^ ":D" ^^^^ 

DEMO

取代
相關問題