Perl - 正则表达式首次出现的组

时间:2013-07-18 09:15:40

标签: regex perl

我在模式上匹配一行,如:

if (/.*someRegExp(.*)someOtherRegExp.*/)
{
process $1
}

但是,问题是,我在行中出现过多次“someRegExp(。*)someOtherRegExp”

你能否告诉我如何才能确定第一次选择?

谢谢你!

2 个答案:

答案 0 :(得分:2)

你需要让量词不贪婪。默认情况下*是贪婪的,这意味着它会尝试尽可能多地捕获。为了使其不贪心,请添加?

if (/.*?someRegExp(.*?)someOtherRegExp.*?/)
{
    process $1
}

答案 1 :(得分:2)

在正则表达式的那部分之前让你的量词不情愿:

if (/.*?someRegExp(.*)someOtherRegExp.*/)
{
    process $1
}

现在,.*?只匹配第一个子字符串与其后面的模式匹配之前的字符串。