如何使用perl获取字符串的子部分?

时间:2013-11-27 15:04:13

标签: regex perl

这是我正在使用的字符串,这个字符串的显示可以重新排列在任何其他字符串中,在我的情况下,我只对获取第一个括号文本并将剩余的文本放在其在线上感兴趣.. < / p>

例如,

(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;
    }

输出与我正在寻找的理想输出不匹配。

3 个答案:

答案 0 :(得分:2)

perreal的答案看起来不错,但是这里是使用ungreedyness的另一种解决方案(使用?之后的*)

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

答案 1 :(得分:1)

试试这个:

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

答案 2 :(得分:1)

你的表情过于贪婪,第一位(测试(。*))匹配最后一行)所以不能正常工作。

使表达非贪婪

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

可能也不需要g(全局)修饰符。