在perl中模式匹配后返回单词

时间:2015-11-23 01:00:13

标签: perl

我有以下perl代码:

if ($text =~ m{(?<!\ban|\bha)d\s(p[^h])}) { 
    print OUT "${\substr $`, -1, 1} \t ${\substr ($', 0, 1)}\n";
}

在一行文字中发现像“疯子”这样的东西,比如“那里有疯子”。下一行给出了前后的背景 - “疯狂”中的“a”和“人物”中的第一个“e”,但我也希望它能给我“疯狂”和“人”这两个词。有没有办法做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:1)

我不确定你能用你的正则表达式轻松搞定,但你可以使用不同的正则表达式来获取它:

#! /usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

for my $text ('there were mad people there',
              'mathematicians and philosophers',
              'one lad phased out',
              'very old pony',
             ) {

    if ($text =~ m{\b(\w+(?<!an|\bha)d)\s(p[^h]\w+)}) { 
        say join "\n", substr($1, -2, 1),
                       substr($2, 1, 1),
                       $1, $2;
    }
}