问题标签 [pcregrep]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
regex - 拆分 pcregrep 多行匹配
tl; dr:如何使用 pcregrep 拆分每个多行匹配?
长版:我有一些文件以(小写)字符开头,有些以数字或特殊字符开头。如果我至少有两行以小写字母开头,我希望在我的输出中使用它。但是,我希望每个发现都被分隔/拆分,而不是相互附加。这是正则表达式:
因此,如果我提供这样的文件:
给出的结果是
然而,我想要的是这样的:
这可能和/或我必须开始使用 Python(或类似的)吗?即使建议从这里开始使用其他东西,首先知道它是否可能仍然会很高兴。
谢谢!
pcregrep - pcregrep 多行 SQL 匹配
我正在尝试将以下多行 SQL 代码与 pcregrep 匹配:
我想匹配 distinct 和 ('ABCD') 但选择语句中可能有多个属性...如果尝试以下操作:
但我不能说可以有多个换行符
pcregrep - 如何用 pcregrep 匹配 n 次或更少的东西?
以下命令将突出显示 4 a 而不是 3 a。我只想匹配不超过3个a。我使用的正则表达式有什么问题吗?
pcre - 使用带有 --color 选项的 pcregrep - 仅突出显示未捕获的表达式?
我想使用 pcregrep 及其 --color 选项来突出显示遵循特定模式的文本:
例如,如果 file.txt 包含:
然后运行:
印刷
鲍勃打招呼
克洛伊打招呼
但我想要的是:
鲍勃打招呼
克洛伊打招呼
有没有办法使用 pcregrep 并让它只突出显示遵循特定正则表达式的文本?
regex - 为什么这个多行正则表达式包含以下行?
我有以下输入,我想编写一个正则表达式,它将匹配除第一行和最后一行之外的每一行。
我认为以下应该有效,但它不匹配任何东西:
用简单的英语,我将其描述为:查找带有异常文本的行,然后非贪婪地跟随任何字符(包括换行符),直到我们对日期进行肯定的前瞻。
出于某种原因,这也包括最后一行,即使它不在 regex101 上。我在这里想念什么?
在很多情况下,我只会grep -A
在这样的情况下使用,但问题是正文可以是任意数量的行。
c - 如何使用 libpcre2 在纯文本文件中搜索子字符串?
我想使用 libpcre2 来匹配纯文本文件中的子字符串,但 libpcre2 不提供:pcre2_match_file() 或 pcre2_match_fd() API。看来我需要自己打开文件并取每一行并依次传递给 pcre2_match() 函数?
我不确定我是否应该这样做。
除此之外还有更高性能的方式吗?例如使用 mmap() 将文件映射到内存?
我只尝试匹配一个缓冲区并想扩展以匹配整个纯文本文件。
regex - Bash:如何在某些行中排除某些行?
我有一个看起来像这样的文件:
我想捕获并输出表单的所有a
和c
行,<a line><anything other than an a or c line><c line>
因此输出如下所示:
请注意,a: 0
开头的c: 4
行和结尾的行都没有被捕获,因为它们不遵循我提到的模式。另请注意,删除了和b
线之间的线。a
c
我一直在尝试使用 Bash 的 pcregrep 进行环视,但还没有找到解决方案。有任何想法吗?
谢谢!
regex - 为什么我的 pcregrep 正则表达式中的积极前瞻不起作用?
我使用 pcregrep 编写了一个正则表达式,一切都按预期运行,直到我添加了一个积极的前瞻。
设想:
我有以下文本文件:
目标:
我想使用带有 pcregrep 的正则表达式来返回一个包含的行a
和一个包含的行,其中包含c
一个未捕获的行。所以它会捕获前三行 ( , , ) 并返回第一 ( ) 和第三 ( ) 行。它不会捕获第四行和第五行,因为它们之间没有线。所以输出将是:b
a
b
c
a
c
b
我试过的
如果我运行pcregrep -M 'a\nb\nc\n'
(命令 1),这将捕获并返回:
正如预期的那样。所以我现在想修改它以捕获b
具有积极前瞻的行。我试过这个:(pcregrep -M 'a\n(?=(b\n))c\n'
命令2)。但是,这不会返回任何内容。
我的问题:
为什么命令 2不返回预期的输出,而命令 1呢?如何返回所需的结果?我知道除了 之外还有其他方法可以做到这一点pcregrep
,但请注意我想使用它,pcregrep
因为我将扩展功能以解决类似问题。
谢谢!
regex - 为什么这个正则表达式没有捕获两个匹配的行?
我有以下文本文件:
我正在尝试匹配以a
使用以下命令开头的行:pcregrep -M '^a'
. 它只匹配第一个a
而不匹配第二个。有谁知道为什么?我使用pcregrep
它是因为这是一个简单的问题,稍后我将扩展到更复杂的场景。
谢谢!
更新
原因是我使用的是 Mac OS,其中每个换行符都是回车符。因此,pcgrep 将文件内容(即 a\ra)解释为一行,并且我的正则表达式仅返回a
该行的第一行,因为这就是我在表达式中指定的全部内容。使用 pcregrep 的解决方案是指定换行符类型。“换行类型”是指正则表达式引擎解释为指定行尾的字符。因此,如果我们在这种情况下指定换行符类型为回车符 (\r),pcregrep 会将我的文件内容解释为两行,并将匹配并返回两行。
我的正则表达式的固定版本是pcregrep -M -N CR '^a'
,其中的-N CR
意思是“换行符类型是回车”。