如何匹配具有相同正则表达式的两行?

How can I match two lines with the same regular expression?

我需要匹配这两个文本:

Last dying gasp time : -

Last dying gasp time : 2021-08-13 18:27:44

我试过的是

但它只匹配其中之一。我怎样才能做到这一点?

您可以使用这个正则表达式:

^Last dying gasp time\h*:\h*(?:-|\d{4}(?:-\d{2}){2}\h+\d{2}(?::\d{2}){2})$

RegEx Demo

正则表达式详细信息:

  • ^: 开始
  • Last dying gasp time:匹配文本Last dying gasp time
  • \h*:\h*:匹配:两边0个或多个空格包围
  • (?:-|\d{4}(?:-\d{2}){2}\h+\d{2}(?::\d{2}){2}):匹配-或日期时间字符串
  • $:结束

你可以使用组引用\<n>,其中<n>是一个数字,表示匹配前面的组号(组mus已经匹配,所以你不能让它匹配提前)

/(Last dying gasp time :).*\n.*/

你首先将正则表达式包围成一个组...然后匹配行的其余部分(这就是 .* 的用途),然后你匹配 \n,然后您参考第一组中匹配的内容 </code>,然后是该行的其余部分 (<code>.*)。好处是您不会被迫使用固定字符串,因此您可以获得具有相同第一部分的所有行(并在此 demo 上进行了演示):

(^[^:\n]+:).*(\n.*)*

这是一个组,由一行开头的任何内容组成,冒号或换行除外,后跟冒号,后跟(组)任何内容,直到新行的任意数量的序列,然后是最后一组匹配的字符串,然后是新行,任意次数。如果您只对至少有两个重复的组感兴趣 headers,只需将最后一个星号更改为加号即可。

(^[^:\n]+:).*(\n.*)+