0

我正在尝试编写代码来扫描文件并产生“匹配!” 当工具读取某行代码之前和之后的空行时的消息。我感兴趣的匹配线是:

Appliance Version 3.1.2

使用 regex.h,我有一个简单的工具可以编译我的 regex 模式,然后针对文件中的每一行执行它以搜索匹配项。该工具的基本功能很好:我能够让它成功搜索各种正则表达式匹配。当我尝试在上述文本行之前和之后匹配包含空行的正则表达式时,就会出现问题。这是我预编译的正则表达式:

[[:space:]]+\n^Appliance Version [[:alnum:]]$\n

我已经尝试了一系列与此类似的不同组合,但似乎没有任何效果。我认为这可能与 \n 有关,在这种情况下,我需要找出一种新方法来指定两个空行。任何对 POSIX 正则表达式的见解将不胜感激!

4

2 回答 2

1

查看您的正则表达式,看起来它正在尝试匹配

Appliance Version [[:alnum:]]

在行尾 ( $)。那将匹配

Appliance Version 3

(3[:alnum:]) 的一个实例,但不是 by

Appliance version 33

[[:alnum:]]只匹配一个字符),更不用说

Appliance version 3.1.2

(上述问题,.也不是实例[:alnum:]

因此,您至少需要更改[[:alnum:]][.[:alnum:]]*(或类似的)。

此外,您对 and 的使用^$显式 是多余的\n,但正则表达式中的任何内容都不需要在匹配之前或之后有一个空行。例如,[[:space:]]\n很乐意与以下行匹配:

不是空行,但末尾有一个空格:\n

(我已经\n明确编写了在行尾显示空白字符的地方。)

匹配空行

一个空行与 匹配^[[:space:]]*$。这与两端的换行符都不匹配。如果您想在某事之前匹配一个空行,请使用:^[[:space:]]*\nSOMETHING在某事之后匹配一个空行:SOMETHING\n[[:space:]]*$. 或者,如果你真的想要一个空行前后:^[[:space:]]*\nSOMETHING\n[[:space:]]*$. (但如果 SOMETHING 恰好是输入的第一行,例如,那将不匹配。或最后一行。)

于 2013-07-30T19:57:09.370 回答
0

正如@rici 指出的那样,您不能组合\n^来匹配两个空行——标记^$匹配一个位置,而不是一个文字\n字符。

要匹配空行,请使用\n\n或 -- 更好,因为您可能不想在开始时对结束上述行的硬返回(?<=\n)\n任何事情。不过,您可以\n\n在最后离开。

于 2013-07-30T20:05:25.120 回答