Regex perl$anchor无法匹配行尾

Regex perl$anchor无法匹配行尾,regex,perl,Regex,Perl,示例:my$pattern=“mkdir a&” 如您所见,我的模式是命令,我想对“&+EOL”进行模式匹配,以区分此命令是否在后台运行 我尝试了/&$/,/&\$/,但失败了 怎么了?你对这种搭配有什么建议 45:if($command=~/&$/){ DB p$命令 mkdir a& DB s 54:print$\n;print“\n”尝试使用以下方法:/&\n|&$/ $匹配字符串的结尾,因此如果您的命令都在同一个字符串中,则该模式将不起作用 \n匹配换行符。尝试使用以下命令:/&\n|&

示例:
my$pattern=“mkdir a&”

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

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

怎么了?你对这种搭配有什么建议

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

DB p$命令

mkdir a&

DB s


54:print$\n;print“\n”

尝试使用以下方法:
/&\n|&$/

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


\n
匹配换行符。

尝试使用以下命令:
/&\n|&$/

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


\n
匹配换行符。

您的模式运行良好

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

my $pattern = 'mkdir a &';

say $pattern =~ /&$/ ? 'match' : 'no match';
输出 无法从您的问题中分辨出来,但很可能您要匹配的字符串末尾有一些空格。可能您在那里有空格或换行符,或者您正在处理源自Windows的文件,并且只删除了LF,留下了终止CR

您可以通过在正则表达式模式的末尾添加可选的空格来解决这个问题,如下所示

say $pattern =~ /&\s*$/ ? 'match' : 'no match';
use Data::Dumper;
$Data::Dumper::Useqq = 1;

print Dumper $pattern;
您可以使用
Data::Dumper
准确地查看字符串包含的内容,如下所示

say $pattern =~ /&\s*$/ ? 'match' : 'no match';
use Data::Dumper;
$Data::Dumper::Useqq = 1;

print Dumper $pattern;

在本例中,它将生成
$VAR1=“mkdir a&”
,您将能够看到您的模式在
&
之后是否有多余的字符

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

my $pattern = 'mkdir a &';

say $pattern =~ /&$/ ? 'match' : 'no match';
输出 无法从您的问题中分辨出来,但很可能您要匹配的字符串末尾有一些空格。可能您在那里有空格或换行符,或者您正在处理源自Windows的文件,并且只删除了LF,留下了终止CR

您可以通过在正则表达式模式的末尾添加可选的空格来解决这个问题,如下所示

say $pattern =~ /&\s*$/ ? 'match' : 'no match';
use Data::Dumper;
$Data::Dumper::Useqq = 1;

print Dumper $pattern;
您可以使用
Data::Dumper
准确地查看字符串包含的内容,如下所示

say $pattern =~ /&\s*$/ ? 'match' : 'no match';
use Data::Dumper;
$Data::Dumper::Useqq = 1;

print Dumper $pattern;

在本例中,它生成
$VAR1=“mkdir a&”
,您将能够看到
&

/&$/
工作后是否有多余字符-为什么不能挖掘?
45:if($command=~/&$/){
DB p$command
mkdir a&
DB s
54:print$\n;print“\n”
实际上,不知道在
&
之后有什么。可能有无法打印的字符。请参见下面的答案。
/$/
有效-为什么不能挖掘?
45:if($command=~/&$/){
DB p$命令
mkdir a&
DB s
54:print$;print“\n”;
实际上,不知道
&
之后有什么。可能有不可打印的字符。请参阅下面的答案。没错:
\n
匹配一个换行符。如果没有换行符,但是字符串的结尾呢?那么,该模式将不起作用。OP需要“&+EOL”的模式匹配,而不是
&
+LF。@baddger964:这与原始版本略有不同。
$
将在字符串末尾的换行符之前匹配。@baddger964否,$匹配字符串的结尾或字符串末尾的换行符之前,正确的:
\n
匹配换行符。如果没有换行符,但字符串的结尾会怎样?然后,该模式将不起作用。OP需要“&+EOL”的模式匹配,而不是
&
+LF。@baddger964:这与原始模式略有不同。
$
将在字符串末尾的换行符之前匹配。@baddger964 No$匹配字符串的结尾或字符串末尾的换行符之前