2015-02-06 59 views
1

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

rpad(SomeText, 2, \' \') , rpad(SomeTexxt, 18, \' \') 

我想这些将被转换为

nvl(rpad(SomeText, 2, \' \'),\'$$\') , nvl(rpad(SomeTexxt, 18, \' \'),\'$$$$$$$$$$$$$$$$$$\') 

我怎样才能做到这一点用PHP ?? 新增加的$应该像2或18那样多。

+0

你需要给有人能够帮助你一些更多的信息。 – Peter 2015-02-06 10:09:02

+0

我看到你需要什么,但你能给出更多的例子来说明文本文件可能会被转换以查看差异吗? – 2015-02-06 10:15:59

+0

嗨。在我的文本文件中,有一些字符串以rpad开头,后跟一些文本,然后是一个数字,以\'\'结尾)。 我希望这些被转换为nvl(rpad和相同的直到\'\'),然后是$中间的数字。 – Tirumalesh 2015-02-06 10:20:23

回答

0

您需要使用pre_replace_callback函数。

$str="rpad(SomeText, 2, \' \') , rpad(SomeTexxt, 18, \' \')"; 
echo preg_replace_callback("~rpad\(\w+,\h*(\d+),[^)]*\)~", function($m){ 
    return 'nvl('.$m[0].",\'".str_repeat("$", $m[1])."\')"; 
} 
, $str); 

(\d+)捕获这是本刚过到somtext和以后,它被用来根据所捕获的数目重复$符号若干次的数量。

输出:

nvl(rpad(SomeText, 2, \' \'),\'$$\') , nvl(rpad(SomeTexxt, 18, \' \'),\'$$$$$$$$$$$$$$$$$$\') 
+0

嗨,谢谢你的回复。它适用于我给出的例子。但对于我的实际情况它不工作的原因:(这是我的字符串看起来像 rpad(lookup_ext([DM_W1_XREF.DM_W1_XREF.XREF_VKORG_VTWEG,\'PRE_LOAD_CACHE \',\'MAX \'],[VKORG_NEW], (NULL),[SYSTEM_NAME,\'= \',T_M6​​7_A033_EXT.SYSTEM_NAME,VKORG_OLD,\'= \',T_M6​​7_A033_EXT.VKORG]) SET(\“output_cols_info \”= \'<?xml version = \“1.0 \ “encoding = \”UTF-8 \“?> \',\”run_as_separate_process \“= \'no \'),4,\'\') – Tirumalesh 2015-02-09 05:34:37

+0

@Tirumalesh以一个精确的字符串作为示例,将它作为另一个问题来提问 – 2015-02-09 05:41:44

+0

嗨avinash,这里有个新问题,可以试试这个吗 http:// stackoverflow。 COM /问题/ 28403766 /正则表达式换查找和替换-A-字符串中的PHP – Tirumalesh 2015-02-09 06:20:16