php - 替换 :D emoticons, 除了内部 ":D"

标签 php regex pcre emoticons

我有:

$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/

相关文章:

php - 如何构建 RESTful API?

regex - Regex_Extract使用PIG

javascript - javascript中的 token 替换

regex - Node JS PCRE 正则表达式和转换支持

php - 更改 php 数组以显示不同的值和产品 ID 数组

php - 无法解决此错误 : "Target class [DatabaseSeeder] does not exist."

PHP 的 include_path - 将其设置为空字符串不起作用

Javascript 正则表达式空白检测

regex - 使用PCRE正则表达式匹配两个二进制数的正确加法

regex - 我们如何匹配任何单个字符,包括 Perl 正则表达式中的换行符?