2015-02-09 88 views
0

替换字符串我有这类型的作品在一个.txt文件正则表达式查找和PHP

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

这可以通过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, \' \'),'$$$$') 
+0

感谢ü洙多。其工作:D – Tirumalesh 2015-02-09 06:57:37

0

有可能有许多的技术来实现你的目标。

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

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

而且这可能是你替换字符串

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

享受