程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了正则表达式:匹配两个最接近的字符串,它们之间只出现另一个字符串大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决正则表达式:匹配两个最接近的字符串,它们之间只出现另一个字符串?

开发过程中遇到正则表达式:匹配两个最接近的字符串,它们之间只出现另一个字符串的问题如何解决?下面主要结合日常开发的经验,给出你关于正则表达式:匹配两个最接近的字符串,它们之间只出现另一个字符串的解决方法建议,希望对你解决正则表达式:匹配两个最接近的字符串,它们之间只出现另一个字符串有所启发或帮助;

我想对两行进行非贪婪匹配,但只包括在它们之间出现另一行的一次。

让我用 ffprobe 的日志来说明:

[FRAME]
media_type=vIDeo
stream_index=1
pict_type=P
coded_picture_number=1
display_picture_number=0
[/FRAME]
[FRAME]
media_type=vIDeo
stream_index=1
pict_type=B
coded_picture_number=1
display_picture_number=0
[/FRAME]
[FRAME]
media_type=vIDeo
stream_index=1
pict_type=P
coded_picture_number=1
display_picture_number=0
[/FRAME]
[FRAME]
media_type=vIDeo
stream_index=1
pict_type=I
coded_picture_number=1
display_picture_number=0
[/FRAME]
[FRAME]
media_type=vIDeo
stream_index=1
pict_type=P
coded_picture_number=1
display_picture_number=0
[/FRAME]
[FRAME]
media_type=vIDeo
stream_index=1
pict_type=I
coded_picture_number=1
display_picture_number=0
[/FRAME]

此日志由视频帧组成。一帧以 [FRAME] 开始,以 [/FRAME] 结束。

我想在下一帧中匹配一个 pict_type=B 紧跟其后的 pict_type=I。

显然 pict_type=B.*?pict_type=I 在这里不起作用,它会匹配 B P I

我试图将 [/FRAME] 的出现次数限制在 1 次

pict_type=B(.*?[^\[\/FRAME\]]{1})pict_type=I

但它匹配两个 [/FRAME] 只是为了达到 pict_type=I

此外,每个视频都有不同的行数,因此使用 \r\n 重复的正则表达式行是没用的

我做错了什么,我怎么能告诉它在我的两个 pict_type 之间只允许一个 [/FRAME] ?

解决方法

您可以使用匹配开头 [FRAME] 和结尾 [/FRAME] 的模式,同时匹配下一帧中的第一个 pict_type=B 和第二个 pict_type=I 不跨越这些边界使用负前瞻(?!

\[FRAME](?:\R(?!\[/?FRAME]|pict_type).*)*+\Rpict_type=B(?:\R(?!\[/?FRAME]|pict_type).*)*+\R\[/FRAME]\R\[FRAME](?:\R(?!\[/?FRAME]|pict_type).*)*+\Rpict_type=I(?:\R(?!\[/?FRAME]|pict_type).*)*+\R\[/FRAME]

模式匹配:

  • \[FRAME] 匹配 [FRAME]
  • (?:\R(?!\[/?FRAME]|pict_type).*)*+ 使用 possessive quantifier [FRAME]
  • 匹配所有不以 [/FRAME]pict_type*+ 开头的行
  • \Rpict_type=B 匹配换行符和 pict_type=B
  • (?:\R(?!\[/?FRAME]|pict_type).*)*+ 匹配所有不以 [FRAME][/FRAME]pict_type 开头的行
  • \R\[/FRAME] 匹配换行符并匹配结束符 [/FRAME]
  • \R\[FRAME] 匹配换行符并匹配第二个 [FRAME]
  • (?:\R(?!\[/?FRAME]|pict_type).*)*+ 匹配所有不以 [FRAME][/FRAME]pict_type 开头的行
  • \Rpict_type=I 匹配换行符并匹配 pict_type=I
  • (?:\R(?!\[/?FRAME]|pict_type).*)*+ 匹配所有不以 [FRAME][/FRAME]pict_type 开头的行
  • \R\[/FRAME] 匹配换行符并匹配 [/FRAME]

Regex demo

正则表达式:匹配两个最接近的字符串,它们之间只出现另一个字符串

大佬总结

以上是大佬教程为你收集整理的正则表达式:匹配两个最接近的字符串,它们之间只出现另一个字符串全部内容,希望文章能够帮你解决正则表达式:匹配两个最接近的字符串,它们之间只出现另一个字符串所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: