用于在PHP中查找和替换字符串的正则表达式

时间:2015-02-09 06:10:02

标签: php

我在.txt文件中有这些类型的文本

rpad(lookup_ext([DM_W1_XREF.DM_W1_XREF.XREF_VKORG_VTWEG, \'PRE_LOAD_CACHE\', \'MAX\'], [ VKORG_NEW ], [  NULL  ], [ SYSTEM_NAME, \'=\', T_M67_A033_EXT.SYSTEM_NAME, VKORG_OLD, \'=\', T_M67_A033_EXT.VKORG ]) 
SET("output_cols_info" = \'<?xml version="1.0" encoding="UTF-8"?><output_cols_info><col index="1" expression="no"/>
</output_cols_info>\', "run_as_separate_process" = \'no\'), 4, \' \')

我希望将它们转换为

nvl(rpad(lookup_ext([DM_W1_XREF.DM_W1_XREF.XREF_VKORG_VTWEG, \'PRE_LOAD_CACHE\', \'MAX\'], [ VKORG_NEW ], [  NULL  ], [ SYSTEM_NAME, \'=\', T_M67_A033_EXT.SYSTEM_NAME, VKORG_OLD, \'=\', T_M67_A033_EXT.VKORG ]) 
SET("output_cols_info" = \'<?xml version="1.0" encoding="UTF-8"?><output_cols_info><col index="1" expression="no"/>
</output_cols_info>\', "run_as_separate_process" = \'no\'), 4, \' \'),'$$$$')

我如何用PHP做到这一点?新添加的$应该与4之类的数字一样多。

2 个答案:

答案 0 :(得分:0)

这可以通过preg_replace_callback函数实现。

$str= <<< EOT
rpad(lookup_ext([DM_W1_XREF.DM_W1_XREF.XREF_VKORG_VTWEG, \'PRE_LOAD_CACHE\', \'MAX\'], [ VKORG_NEW ], [  NULL  ], [ SYSTEM_NAME, \'=\', T_M67_A033_EXT.SYSTEM_NAME, VKORG_OLD, \'=\', T_M67_A033_EXT.VKORG ]) 
SET("output_cols_info" = \'<?xml version="1.0" encoding="UTF-8"?><output_cols_info><col index="1" expression="no"/>
</output_cols_info>\', "run_as_separate_process" = \'no\'), 4, \' \')
EOT;
echo preg_replace_callback("~(?s)rpad\(.*?,\h*(\d+),\h*\\\\'\h*\\\\'\)~", function($m){
    return 'nvl('.$m[0].",'".str_repeat("$", $m[1])."')";
}
    , $str);

<强>输出:

nvl(rpad(lookup_ext([DM_W1_XREF.DM_W1_XREF.XREF_VKORG_VTWEG, \'PRE_LOAD_CACHE\', \'MAX\'], [ VKORG_NEW ], [  NULL  ], [ SYSTEM_NAME, \'=\', T_M67_A033_EXT.SYSTEM_NAME, VKORG_OLD, \'=\', T_M67_A033_EXT.VKORG ]) 
SET("output_cols_info" = \'<?xml version="1.0" encoding="UTF-8"?><output_cols_info><col index="1" expression="no"/>
</output_cols_info>\', "run_as_separate_process" = \'no\'), 4, \' \'),'$$$$')

答案 1 :(得分:0)

可能有很多技术可以实现你的目标。

这很简单,你的正则表达式可能是你的正则表达式

rpad(.*?)\\'\s\\\\'\)

这可能是你的替换字符串

rpad(val\1,'$$$$')

享受