2015-02-06 108 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