繁体   English   中英

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

[英]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\s+:\s+[\d-]+\s+[\d:]+
  • Last dying gasp time\s+:\s+[\d-]
  • Last dying gasp time\s+:\s+[\d-]+(\s+[\d:]+)?

但它只匹配一个或另一个。 我怎样才能做到这一点?

您可以使用此正则表达式:

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

正则表达式演示

正则表达式详细信息:

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM