php正则匹配、替换两特定字符串之间的内容

需要正则匹配替换。

:万物生{字*丛@@丛林法则*字}这里只有【魔鬼】,不具有任何气味{字*合@@合则铭记*字}。不熟,才能生长。

需要匹配的内容均以{字*开头,以*字}结尾


(?={字*)(.*)(?=*字})

仅匹配出一项,一整行,如下

{字*丛@@丛林法则*字}这里只有【魔鬼】,不具有任何气味{字*合@@合则铭记*字}

目标php匹配两项:

{字*丛@@丛林法则*字}
{字*合@@合则铭记*字}

并替换为
【丛】[丛林法则]
【合】[合则铭记]

最终为:

:万物生**【丛】[丛林法则]**这里只有【魔鬼】,不具有任何气味**【合】[合则铭记]**。不熟,才能生长。

请求指导

阅读 3.1k
2 个回答

使用 preg_replace_callback 匹配外围组,再使用 preg_replace 处理组内。

图片.png

编辑器直接粘贴进来,反斜杠会丢失,到 JS Run 获取代码

<?php

$str = ':万物生{字*丛@@丛林法则*字}这里只有【魔鬼】,不具有任何气味{字*合@@合则铭记*字}。不熟,才能生长。';

$result = preg_replace_callback('!{字\*(.+?)\*字}!u', function ($matches) {
    return preg_replace('!([\x{4e00}-\x{9fa5}])@@([\x{4e00}-\x{9fa5}]{4})!u', '**【\\1】[\\2]**', $matches[1]);
}, $str);

var_dump($result);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题