我有以下perl代码:
if ($text =~ m{(?<!\ban|\bha)d\s(p[^h])}) {
print OUT "${\substr $`, -1, 1} \t ${\substr ($', 0, 1)}\n";
}
在一行文字中发现像“疯子”这样的东西,比如“那里有疯子”。下一行给出了前后的背景 - “疯狂”中的“a”和“人物”中的第一个“e”,但我也希望它能给我“疯狂”和“人”这两个词。有没有办法做到这一点?
谢谢!
答案 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;
}
}