我在.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之类的数字一样多。
答案 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,'$$$$')
享受