$txt = ':D :D ":D" :D:D:D:D';
我想preg_replace
所有:D
到^
如果":D"
然後所不能替代的。
===> output: '^^":D" ^^^^';
$txt = ':D :D ":D" :D:D:D:D';
我想preg_replace
所有:D
到^
如果":D"
然後所不能替代的。
===> output: '^^":D" ^^^^';
(* SKIP)(* F)魔術
$replaced = preg_replace('~"[^"]+"(*SKIP)(*F)|:D~', '^', $yourstring);
在the demo,看到的取代在底部窗格中。
這個問題是該技術的一個經典案例在這個問題解釋"regex-match a pattern, excluding..."
交替的左側|
比賽完全"quotes"
然後故意失敗,發動機之後跳到字符串中的下一個位置。所以報價被中和。右側匹配:D
,我們知道它們是正確的,因爲它們沒有與左側表達式匹配。
參考
你可以使用一個負前瞻和回顧後,
(?<!\"):D(?!\")
它匹配:D
前面沒有"
(雙引號),然後是"
。然後匹配的字符由^
<?php
$string = ':D :D ":D" :D:D:D:D';
$pattern = "~(?<!\"):D(?!\")~";
$replacement = "^";
echo preg_replace($pattern, $replacement, $string);
?> //=>^^ ":D" ^^^^
取代