regex - 为什么这个正则表达式没有捕获两个匹配的行?
问题描述
我有以下文本文件:
a
a
我正在尝试匹配以a
使用以下命令开头的行:pcregrep -M '^a'
. 它只匹配第一个a
而不匹配第二个。有谁知道为什么?我使用pcregrep
它是因为这是一个简单的问题,稍后我将扩展到更复杂的场景。
谢谢!
更新
原因是我使用的是 Mac OS,其中每个换行符都是回车符。因此,pcgrep 将文件内容(即 a\ra)解释为一行,并且我的正则表达式仅返回a
该行的第一行,因为这就是我在表达式中指定的全部内容。使用 pcregrep 的解决方案是指定换行符类型。“换行类型”是指正则表达式引擎解释为指定行尾的字符。因此,如果我们在这种情况下指定换行符类型为回车符 (\r),pcregrep 会将我的文件内容解释为两行,并将匹配并返回两行。
我的正则表达式的固定版本是pcregrep -M -N CR '^a'
,其中的-N CR
意思是“换行符类型是回车”。
解决方案
由于您在 MasOS 中创建了一个文本文件,因此行结尾用 CR(回车)符号(\r
, \x0D
,ASCII 表中索引为 13 的字符)表示。
默认情况下,pcregrep
其他类似的工具\n
将 LF(换行)符号视为换行符。
你应该告诉pcregrep
使用 CR 作为换行符使用-N
选项:
pcregrep -o -N CR '^a' file
^^^^^
推荐阅读
- c# - 如果密钥中的值发生更改,密钥库值不会更新,因为它会为密钥生成新版本
- c# - 实体框架和 AsQueryable 性能问题
- oracle - FRM-50026 日期必须以 DD-MON-YYYY 等格式输入
- google-cloud-platform - 保护 Google 云功能免受 DDOS 攻击的最佳方法是什么
- javascript - 如何使用javascript更改文本颜色?
- node.js - 在 express-gateway 中找不到模块 users.json 错误
- angular - 如何创建显示值和模型值不同的输入?
- database - 是否可以在返回之前合并 neo4j 中两个对象的属性?
- javascript - 如何使用数组数组中的多个变量进行计算和显示(Vue+laravel)
- django - 如何在对象过滤器中正确使用日期