Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 为什么这个正则表达式不能捕获两个匹配行?_Regex_Pcregrep - Fatal编程技术网

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。默认换行符仅在此处显示。