2013-11-27 38 views
0

這裏是我使用的字符串,這個字符串的顯示可以在任何其他的重新排列,在我的情況下,我只是感興趣的是獲得第一個括號文本並將其餘的文本放在其上線..如何使用perl獲取字符串的子部分?

例如,

(test network) or test(section memory) or test(section storage) 

理想輸出:

test section network 
or test(section memory) or test(section storage) 

這裏的Perl代碼我嘗試使用來實現這一目標。

while(<readline>) 
    { 
     $_ =~ s/^\(test (.*)\)(.*)/test section $1\n$2/gi; 
    } 

輸出與我正在尋找的理想輸出不匹配。

回答

1

試試這個:

s/^\(test ([^)]*)\)\s*(.*)/test section $1\n$2/gi 
+0

感謝perreal,我會試試看 –

1

你表達過於貪婪,第一位(測試(*))相匹配的最後一個)就行了,所以不到風度的工作。

使表達非貪婪

s/^\(test (.*?)\)(.*)/test section $1\n$2/gi 

可能不需要g(全局)修飾符要麼。

2

perreal答案似乎不錯,但這裏是用ungreedyness另一種解決辦法(使用?*之後)

s/^\(test (.*?)\)\s*(.*)/test section $1\n$2/gi