perl $ anchor无法匹配行尾

时间:2016-08-29 09:19:09

标签: regex perl

示例:my $pattern = "mkdir a &"

正如您所看到的,我的模式是命令,我想为“& + EOL”进行模式匹配,以区分此命令是否在后台运行。

我尝试使用/&$//&\$/,但失败了。

有什么问题?你对这种模式匹配的建议是什么?

45: if ($command =~ /&$/) {

DB<2> p $command

mkdir a &

DB<3> s

54: print $_;print "\n";

2 个答案:

答案 0 :(得分:2)

你的模式运作良好

use strict;
use warnings 'all';
use feature 'say';

my $pattern = 'mkdir a &';

say $pattern =~ /&$/ ? 'match' : 'no match';

输出

match

从你的问题中无法判断,但你可能在你想要匹配的字符串末尾有一些空格。也许你在那里有一个空格或换行符,或者你正在处理一个源自Windows的文件而你只删除了LF,留下了终止CR。

您可以通过在正则表达式模式的末尾添加可选的空格来解决此问题,例如

say $pattern =~ /&\s*$/ ? 'match' : 'no match';

您可以使用Data::Dumper准确查看字符串包含的内容,例如

use Data::Dumper;
$Data::Dumper::Useqq = 1;

print Dumper $pattern;

在这种情况下,它会生成$VAR1 = "mkdir a &";,您将能够看到&之后是否有任何多余的字符。

答案 1 :(得分:0)

尝试使用此:/&\n|&$/

$匹配字符串的结尾,因此如果您的命令都在同一个字符串中,则该模式将不起作用。

\n匹配换行符。