Perl 正则表达式 \A 与文件的开头不匹配?



我逐行迭代文件,找出以星号:*开头的行。我的简单regexp适用于除文件第一行以外的所有行。

期望的行为是:正则表达式应该正确匹配以星号开头的行。

实际行为是:如果星号出现在文件的第一行,则regexp无法匹配。

我的调试尝试包括:

  1. 在文件开头添加空行。结果:以前遗漏的行,现在在文件的第二行,通过regexp正确匹配。

  2. 从regexp中删除A,只需与asterix匹配即可。文件的第一行现在正确匹配regexp。

  3. 尝试使用^而不是A。文件的第一行仍然不匹配。

复制的最小代码

while (<$input_fh>) {
chomp;
$line = $_;
if ($line =~ /A*/) {
...
}
}

输入文件由可能以星号开头也可能不以星号开头的文本行组成。

/A*/匹配字符串的开头,然后匹配一个星号字符。

您需要匹配开始和星号之间的任何符号。

使用

/A.*?*/

查看验证

解释

--------------------------------------------------------------------------------
A                       the beginning of the string
--------------------------------------------------------------------------------
.*?                      any character except n (0 or more times
(matching the least amount possible))
--------------------------------------------------------------------------------
*                       '*'

相关内容

最新更新