当前位置: 首页 > 知识库问答 >
问题:

C如何指定以空行开始并以空行结束的POSIX正则表达式?

阎建华
2023-03-14

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

Appliance Version 3.1.2

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

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

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

共有2个答案

徐飞尘
2023-03-14

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

要匹配空行,请使用 \n\n 或 -- 更好,因为您可能不想对结束上述行的硬回车执行任何操作,(?

吕学
2023-03-14

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

Appliance Version [[:alnum:]]

在行尾 ($)。这将匹配

Appliance Version 3

3[: alnum:]的实例),但不是由

Appliance version 33

[[:alnum:]]仅匹配一个字符),比

Appliance version 3.1.2

(上面的问题,还有.不是[: alnum:]的实例)

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

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

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

(其中我显式编写了\n以在行尾显示空白字符。)

匹配空行

单个空行与^[:space:]*$匹配。这与两端的换行符不匹配。如果要在某些内容之前匹配空行,请使用:^[[:space:]]*\nMETHING。要在某些内容后匹配空行,请执行以下操作:something\n[[:space:]]*$。或者,如果您确实希望在以下内容前后加一行空白:^[[:space:]]*\nMETHING\n[[:space:]]*$。(但如果某个东西恰好是输入的第一行,或者是最后一行,那就不匹配了。)

 类似资料:
  • 问题内容: 正则表达式可以匹配空格 或 字符串的开头吗? 我正在尝试用英镑符号替换缩写为GBP的货币。我可以匹配任何以GBP开头的东西,但我想更加保守一些,并在它周围寻找某些定界符。 我可以同时做后两个例子吗? 问题答案: 使用OR“ ”运算符:

  • 问题内容: 我想解析一个文件,并且想使用php和regex剥离: 空白或空行 单行注释 多行注释 基本上我想删除任何包含 或多行注释 如果可能的话,另一个正则表达式检查行是否为空(删除空行) 那可能吗?有人可以向我发布一个正则表达式吗? 非常感谢。 问题答案:

  • 问题内容: 我正在研究一个小的Python脚本来清理HTML文档。它的工作方式是接受KEEP的标签列表,然后解析不在列表中的HTML代码,破坏标签我一直在使用正则表达式来做到这一点,而且我已经能够匹配开始标签和自动关闭标签但不关闭标签。 我一直在尝试匹配结束标记的模式是。在我看来这是合乎逻辑的,所以为什么不起作用?本应匹配任何不是一个锚定标记(不就是“a”是可以anything –这只是一个例子)

  • 问题内容: 应该很简单,但是我为此而疯狂。 给定一个像这样的文本: 我需要删除行终止符的Java正则表达式,然后新行以空格开头,以便上面的示例文本变为: 问题答案: 这不会帮助吗?

  • 本文向大家介绍javascript 正则表达式去空行方法,包括了javascript 正则表达式去空行方法的使用技巧和注意事项,需要的朋友参考一下 去除前导和后续空格 /(^\s*)|(\s*$)/g 范例如下: 函数体: 使用方法: 如果要清楚所有空格,包括中间的,范例如下: 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!

  • 问题内容: 我需要一个不以点开头或不以开头的正则表达式。 此正则表达式有效,但在第一个条件下失败;它不以点开头: 例如:应为有效字符串,但失败。 问题答案: 从上一个问题开始,您应该可以使用: 但是,如果您希望能够匹配1个字符串,则需要否定先行: 而且,如果您也想匹配空字符串,只需使用代替即可。