【问题标题】:Regex: How to capture multiple lines of contents正则表达式:如何捕获多行内容
【发布时间】:2016-07-18 09:08:15
【问题描述】:

解决git冲突时,我尝试使用正则表达式从源文件中捕获冲突,内容是这样的:

<<<<<<< HEAD
    line1
    line2
    ... 
=======

这是我的版本:

^<<<<<<< HEAD\n\t.+\n\t.+\n\t=======\n\t  

显然,我的版本只适用于固定行,因为我需要重复.+\n\t 来匹配它们。但真的不知道如何正确地做到这一点?有什么建议吗?

[更新] 我正在使用 Boost 库中的 Perl 兼容正则表达式 (PCRE) 引擎。

【问题讨论】:

  • 试试(?ms)^&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD\n.*?\n\t*=======\n*\t*
  • @WiktorStribiżew 似乎你错过了 HEAD 内容为空的情况:
  • 抱歉,您只提供了一个没有规范的示例字符串。这就是我所能推断的。请使用相关的测试用例更新问题。我不知道空块是什么样子的。也许(?ms)^&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD.*?=======(?:\n|$) 就是你所需要的

标签: regex


【解决方案1】:

你可以使用

(?sm)^<<<<<<< HEAD.*?\n\t*=======\n*\t*

regex demo

解释

  • (?sm) - 内联修饰符:s 使 . 匹配换行符以及任何其他字符,m 使 ^ 匹配行首,$ 匹配行尾
  • ^ - 行首
  • &lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD - 文字字符串 &lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD
  • .*? - 0+ 任意字符,尽可能少,直到第一个
  • \n\t* - LF 后跟 0+ 个标签
  • ======= - 文字子串
  • \n*\t* - (不确定你是否真的需要它)0+ LF 后跟 0+ 制表符。

【讨论】:

    【解决方案2】:

    你使用什么语言? 该选项是允许“。”匹配新行和任何字符,以便匹配多行字符串。

    添加此内容需要了解您编码所用的语言。

    【讨论】:

    • Perl Compatible Regular Expressions,更新问题
    • 你可以用@+我的用户名来评论我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    相关资源
    最近更新 更多