Regex Perl正则表达式不响应$

Regex Perl正则表达式不响应$,regex,perl,Regex,Perl,我有以下代码: #!/usr/bin/perl use Test::Simple tests => 2; $file = "lalaletc"; $file2 = "lalal"; ok($file =~ m/^lala/); ok($file2 =~ m/^lala$/); 结果如下: 1..2 ok 1 not ok 2 # Failed test at ./test.pl line 7. # Looks like you failed 1 test of 2. 但是$

我有以下代码:

#!/usr/bin/perl
use Test::Simple tests => 2;    
$file = "lalaletc";
$file2 = "lalal";
ok($file =~ m/^lala/);
ok($file2 =~ m/^lala$/);
结果如下:

1..2
ok 1
not ok 2
#   Failed test at ./test.pl line 7.
# Looks like you failed 1 test of 2.

但是$file2没有更多的字符,所以我希望它能成功通过测试2。为什么不匹配?

$
匹配本例中字符串/行的结尾。由于字符串中存在未匹配的未完成“l”,因此模式匹配失败。

$
在本例中匹配字符串/行的结尾。由于字符串中有一个未匹配的“l”,因此模式匹配失败。

您的变量
$file2
设置为
lalal
。这是5个字符。您的正则表达式是
/^lala$/
,这意味着:

  • 行/字符串的开头
  • 拉拉
  • 行尾/字符串
因为缺少最后一个
l
,所以只有4个字符。正则表达式不匹配,测试失败。这是正确的行为

请在此处尝试: 在末尾添加缺少的
l
,它将匹配

以下是一些来自:


注意,对于这种情况,您不需要正则表达式。您也可以使用。

您的变量
$file2
设置为
lalal
。这是5个字符。您的正则表达式是
/^lala$/
,这意味着:

  • 行/字符串的开头
  • 拉拉
  • 行尾/字符串
因为缺少最后一个
l
,所以只有4个字符。正则表达式不匹配,测试失败。这是正确的行为

请在此处尝试: 在末尾添加缺少的
l
,它将匹配

以下是一些来自:


注意,对于这种情况,您不需要正则表达式。您也可以使用。

我认为这不是一个坏问题。这并不意味着投了反对票。每个人都会偶尔犯这些错误。我们都太盲目了,根本看不到丢失的字母或semikolon;它告诉我们尝试了什么;它显示错误消息;写得很清楚;这是我们在一个好问题中所要求的一切。OP可能对REs的了解有限,但这就是他来寻求帮助的原因。这是个好问题+1我认为这不是一个坏问题。这并不意味着投了反对票。每个人都会偶尔犯这些错误。我们都太盲目了,根本看不到丢失的字母或semikolon;它告诉我们尝试了什么;它显示错误消息;写得很清楚;这是我们在一个好问题中所要求的一切。OP可能对REs的了解有限,但这就是他来寻求帮助的原因。这是个好问题+1.
NODE                     EXPLANATION
--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  lala                     'lala'
--------------------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string