用正则表达式替换包装器(父)字符串并保留内部子内容

时间:2015-04-29 09:45:51

标签: php regex

我有多个文件已经过时格式,我想用最新的格式替换它们。我的一个麻烦是找到所有的包装器字符串并替换它们,而我必须保留它们的内部内容。

示例

我想将表达式ABC($IGNORE$)转换为XBD([$IGNORE$])->T。 这是需要更新格式的字符串。

输入

... ABC( ......
..... (inner content should not be changed) .....
......) ....

输出

... XBD([ ......
..... (inner content should not be changed) .....
......])->T ....

我如何实现它?

1 个答案:

答案 0 :(得分:1)

您可以使用以下能够匹配嵌套圆括号的正则表达式:

\bABC(\(((?>[^()]+)|(?-2))*\))

替换为XBD$1->T

请参阅demo

Sample PHP code

<?php
    $re = "#\bABC(\(((?>[^()]+)|(?-2))*\))#"; 
    $str = "ABC( ......\n..... (inner content should not be changed) .....\n......) "; 
    $subst = "XBD$1->T"; 
    echo $result = preg_replace($re, $subst, $str);
?>