如何匹配具有相同正则表达式的两行?
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>
是一个数字,表示匹配前面的组号(组mus已经匹配,所以你不能让它匹配提前)
/(Last dying gasp time :).*\n.*/
你首先将正则表达式包围成一个组...然后匹配行的其余部分(这就是 .*
的用途),然后你匹配 \n
,然后您参考第一组中匹配的内容 </code>,然后是该行的其余部分 (<code>.*
)。好处是您不会被迫使用固定字符串,因此您可以获得具有相同第一部分的所有行(并在此 demo 上进行了演示):
(^[^:\n]+:).*(\n.*)*
这是一个组,由一行开头的任何内容组成,冒号或换行除外,后跟冒号,后跟(组)任何内容,直到新行的任意数量的序列,然后是最后一组匹配的字符串,然后是新行,任意次数。如果您只对至少有两个重复的组感兴趣 headers,只需将最后一个星号更改为加号即可。
(^[^:\n]+:).*(\n.*)+
我需要匹配这两个文本:
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>
是一个数字,表示匹配前面的组号(组mus已经匹配,所以你不能让它匹配提前)
/(Last dying gasp time :).*\n.*/
你首先将正则表达式包围成一个组...然后匹配行的其余部分(这就是 .*
的用途),然后你匹配 \n
,然后您参考第一组中匹配的内容 </code>,然后是该行的其余部分 (<code>.*
)。好处是您不会被迫使用固定字符串,因此您可以获得具有相同第一部分的所有行(并在此 demo 上进行了演示):
(^[^:\n]+:).*(\n.*)*
这是一个组,由一行开头的任何内容组成,冒号或换行除外,后跟冒号,后跟(组)任何内容,直到新行的任意数量的序列,然后是最后一组匹配的字符串,然后是新行,任意次数。如果您只对至少有两个重复的组感兴趣 headers,只需将最后一个星号更改为加号即可。
(^[^:\n]+:).*(\n.*)+