微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用PCRE regex与Grep进行条件匹配,未按预期匹配条件部分

如何解决使用PCRE regex与Grep进行条件匹配,未按预期匹配条件部分

我正在尝试实现一个 Git钩子,该钩子将检查提交消息是否符合提交模板。为此,我想到了使用正则表达式(这很明显)。规则如下:

  1. 标题必须包含一个或多个与提交性质相关的标签。每个标签都用“ []”括起来,并且有一组特定的标签
  2. 标题必须少于72个字符。
  3. 标题必须至少是一个单词(不能是单个字符)。
  4. 邮件正文(如果包含)必须与标题之间用空行分隔(这意味着跳转两行)。
  5. 邮件正文(如果包含)必须超过一个字符。

有了这些规则,我想到了以下正则表达式:(?=(?:\[(?:feat|fix|style)\])+\s\w{2,}).{8,72}(?(?=.*\n{2})\n{2}\w{2,})。当我在RegExr中对其进行测试时,该正则表达式可以正常工作,但是当我使用 grep 对其进行测试时,它不能按预期的方式工作(我仅在示例文件中通过终端对其进行了测试)。 / p>

这将是带有grep的命令行指令:$ grep -P "(?=(?:\[(?:feat|fix|style)\])+\s\w{2,})" holas.txt文件“ holas.txt”仅包含以下内容 [feat] Hola \ n \ nHola 。运行此命令仅返回与第一行( [feat] Hola )的一个匹配,而不与消息正文中的文本相匹配,该文本应与regex的条件部分。如果我只是删除正文中的行,它也与第一行匹配,但这不应该那样,也不应该匹配(我已经使用提到的在线工具对其进行了测试)。

我也尝试过使用 pcregrep ,但结果是相同的。

谢谢。

解决方法

找到了解决方案!如果使用 -z 标志,则grep会将文件解释为仅一行(它将 \ n 替换为 null char)。这意味着正则表达式将应用于整个大行,而不是单独应用于每行。

这么简单...我应该更好地阅读文档。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。