Regex 为什么这个正则表达式不能捕获两个匹配行?
我有以下文本文件:Regex 为什么这个正则表达式不能捕获两个匹配行?,regex,pcregrep,Regex,Pcregrep,我有以下文本文件: a a 我正在尝试使用以下命令匹配以a开头的行:pcregrep-M'^a'。它只匹配第一个a,而不匹配第二个。有人知道为什么吗?我使用的是pcregrep,因为这是一个简单的问题,稍后我将扩展到更复杂的场景 谢谢 更新 原因是我使用的是Mac OS,其中的每一条换行都是回车。因此,pcregrep将文件内容(即a\ra)解释为一行,我的正则表达式只返回该行中的第一个a,因为这是我在表达式中指定的全部内容。使用pcregrep的解决方案是指定换行类型换行符类型”是指正则表达
a
a
我正在尝试使用以下命令匹配以a
开头的行:pcregrep-M'^a'
。它只匹配第一个a
,而不匹配第二个。有人知道为什么吗?我使用的是pcregrep
,因为这是一个简单的问题,稍后我将扩展到更复杂的场景
谢谢
更新
原因是我使用的是Mac OS,其中的每一条换行都是回车。因此,pcregrep将文件内容(即a\ra)解释为一行,我的正则表达式只返回该行中的第一个a
,因为这是我在表达式中指定的全部内容。使用pcregrep的解决方案是指定换行类型换行符类型”是指正则表达式引擎解释为指定行尾的字符。因此,如果我们在本例中指定换行符类型为回车符(\r),pcregrep将把我的文件内容解释为两行,并将两者匹配并返回
我的正则表达式的固定版本是
pcregrep-M-ncr'^a'
,其中-ncr
表示“换行类型是回车符”。因为您在MasOS中创建了一个文本文件,所以行的结尾用CR(回车符)符号表示(\r
,\x0D
,ASCII表中带有索引13的字符)
默认情况下,<代码> pCREGRIP和其他类似的工具考虑<代码> \n>代码>,将LF(行提要)符号作为行中断字符。 您应该告诉
pcregrep
使用-N
选项将CR用作换行符:
pcregrep -o -N CR '^a' file
^^^^^
行尾是CR吗?我刚刚测试过,它工作正常。你确定换行符是运行grep的系统的正确换行符吗?。。。CR-LF是否在PC上?或者您从Linux或Mac系统中提取数据时没有转换换行符?@WiktorStribiżew CR是什么意思?,
\x0D
或\r
字符。这就是:Mac OSX。默认换行符仅在此处显示。