Perl正则表达式不响应$

时间:2013-05-14 14:10:48

标签: 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.

但$ file2没有更多的字符,所以我希望它能够成功测试2.为什么不呢?

2 个答案:

答案 0 :(得分:9)

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

  • 行/字符串的开头
  • 拉拉
  • 行尾/字符串

这只有4个字符,因为缺少最后一个l。正则表达式不匹配,测试失败。这是正确的行为。

在此处尝试:http://rubular.com/r/O0GhEIiVAZ 在最后添加缺少的l,它将匹配。

以下是additional explanation中的一些this site

NODE                     EXPLANATION
--------------------------------------------------------------------------------
  ^                        the beginning of the string
--------------------------------------------------------------------------------
  lala                     'lala'
--------------------------------------------------------------------------------
  $                        before an optional \n, and the end of the
                           string

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

答案 1 :(得分:3)

在这种情况下,

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