我有:
$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 ,查看底部 Pane 中的替换。
这个问题是这个问题中解释的技术的经典案例 "regex-match a pattern, excluding..."
交替的左侧 |
匹配完整的 "quotes"
然后故意失败,之后引擎跳到字符串中的下一个位置。所以报价被中和了。右侧匹配 :D
,我们知道它们是正确的,因为它们与左侧的表达式不匹配。
引用
关于php - 替换 :D emoticons, 除了内部 ":D",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24688549/