我在Perl中匹配常规表达式.比赛句子分布在多条线上.
我意识到我必须只在一行中输入匹配正则表达式,如果我扩展到多行则失败:
$array_11 =~ m{By Steve (.*), MarketWatch LONDON (.*) -- Shares of Anglo American rallied on Monday morning as (.*) bet that the mining group will reject a (.*)};'
Run Code Online (Sandbox Code Playgroud)
如果我用多行写它,它将无法匹配此字符串.
mir*_*rod 12
如前所述,看起来你正在寻找x修饰符.该修饰符忽略regexp中的所有空格,并允许注释(以#开头).
在你的情况下,它有点难看,因为你必须用[],\ s或\ s +替换你想要在regexp中匹配的所有空格:
$array_11 =~ m{By \s+ Steve \s+ (.*), \s+
MarketWatch \s+ LONDON \s+ (.*) \s+
-- \s+ Shares \s+ of \s+ Anglo \s+ American \s+
rallied \s+ on \s+ Monday \s+ morning \s+ as \s+
(.*) \s+ bet \s+ that \s+ the \s+ mining \s+
group \s+ will \w+ reject \w+ a \w+(.*)
}x;
Run Code Online (Sandbox Code Playgroud)
所以实际上我可能会写这样的东西:
my $sentence= q{By Steve (.*), MarketWatch LONDON (.*) }
. q{-- Shares of Anglo American rallied on Monday morning as (.*) }
. q{bet that the mining group will reject a (.*)}
;
my $array_11=~ m{$sentence};
Run Code Online (Sandbox Code Playgroud)
最后一条评论:$array_11具有强烈的代码气味,如果它是一个数组,那么使它成为一个数组,而不是几个标量变量.