棘手的正则表达式问题,匹配以关键字开头的行中的值



我试图搜索某个关键字的文本文件,并匹配该关键字时,它所包含的行以某个值开始:例如,我试图匹配"bar"的实例,当这些实例出现在以"foo"开头的行中。例如:

foo dum diddly bar dee
hello world bar hopping
foo how bar you
foo jingle jangle jingle

第一行和第三行应该匹配,但是第二行和第四行不应该匹配。我尝试过使用像这样的后面操作符:/(?<=^foo)bar/,特别是使用^操作符,以便尝试匹配行开头,但是这不起作用。我还在没有^的情况下对它进行了测试,并且在foo和bar周围有和没有b,试图隔离正则表达式出错的地方。作为参考,我正在使用perl,下面是我的全部代码:

use 5.14.2;
use strict;
use warnings;
open(my $fh, "<", "perltest.txt") or die "$!";
while(my $line = <$fh>)
{
    if($line =~ /(?<=^foo)bar/)
    {
        print "succeededn";
    }
    else
    {
        print "failedn"
    }
}
print "finishedn";

我在所有这些行上得到失败匹配。这似乎不是我的代码的问题,因为我可以成功地获得匹配与更基本的正则表达式计算,所以我相当肯定的问题在于后面。我也尝试过regex101,但无济于事。如果有人有任何关于如何创建一个成功的正则表达式的建议,那将是不可思议的。

试试这个:

while (<DATA>) {
    print if m/^foo.*bbarb/
}
__DATA__
foo dum diddly bar dee
hello world bar hopping
foo how bar you
foo jingle jangle jingle

打印:

foo dum diddly bar dee
foo how bar you

您可以使用以下方式进行匹配:

/^(?=foob).*?b(bar)b.*/gm

$1 (group 1)提取匹配值

看到演示

这会给你想要的输出:

use strict;
use warnings;
open(my $fh, "<", "perltest.txt") or die "$!";
while(my $line = <$fh>)
{
    if($line =~ /^foo.*bbarb/)
    {
        print "$line";
    }
}
_____DATA_____
foo dum diddly bar dee
hello world bar hopping
foo how bar you
foo jingle jangle jingle
输出:

foo dum diddly bar dee
foo how bar you

相关内容

  • 没有找到相关文章

最新更新