为什么此正则表达式不能同时捕获两条匹配的行?

时间:2019-06-04 20:21:46

标签: regex pcregrep

我有以下文本文件:

a
a

我正在尝试使用以下命令来匹配以a开头的行:pcregrep -M '^a'。它仅匹配第一个a,而不匹配第二个。有人知道为什么吗?我使用pcregrep是因为这是一个简单的问题,稍后我将扩展到更复杂的情况。

谢谢!

更新

原因是我使用的是Mac OS,其中每个换行符都是回车符。因此,pcregrep将文件内容(a \ ra)解释为一行,而我的正则表达式仅返回该行的第一个a,因为这就是我在表达式中指定的全部内容。使用pcregrep的解决方案是指定换行符类型。 “换行符类型”是指Regex引擎将其解释为指定行尾的字符。因此,如果在这种情况下我们指定换行符类型为回车(\ r),则pcregrep会将我文件的内容解释为两行,并且将匹配并返回两者。

我的Regex的固定版本是pcregrep -M -N CR '^a',其中-N CR的意思是“换行符是回车”。

1 个答案:

答案 0 :(得分:1)

自从您在MasOS中创建了文本文件以来,行尾用CR(回车)符号(\r\x0D(ASCII表中的索引为13的字符))表示。

默认情况下,pcregrep和其他类似工具将\n(LF(换行符)符号)作为换行符。

您应该通过pcregrep选项告诉-N将CR用作换行符:

pcregrep -o -N CR '^a' file
            ^^^^^