登录
首页 >  Golang >  Go问答

使用单个/通用正则表达式组实现匹配和条件匹配

来源:stackoverflow

时间:2024-02-18 09:21:22 317浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《使用单个/通用正则表达式组实现匹配和条件匹配》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

我想提取两个不同的测试字符串 /i/int/2021/11/18/019e1691-614c-4402-a8c1-d0239ad1ac45/,640-1_999899,480-1_999899,960-1_999899,1280-1_999899 ,1920-1_999899,.mp4.csmil/master.m3u8?set-segment-duration=responsive

/i/int/2021/11/25/,live_20211125_215206_sendeton_640x360-50p-1200kbit,live_20211125_215206_sendeton_480x270-50p-700kbit,live_20211125_215206 _sendeton_960x540-50p-1600kbit,live_20211125_215206_sendeton_1280x720-50p-3200kbit,live_20211125_215206_sendeton_1920x1080-50p-5000kbit,.mp4.csmil /master.m3u8

使用单个正则表达式并位于 Group-1 中。

通过使用此正则表达式 ^.[i,na,fm,d]+\/(.+([,\/])?(\/|.+=.+,\/).+\/ [,](live.([^,]).).+_)?.+(640).*$ 我可以获得第二个字符串来匹配所需的结果 int/2021/11/25/ ,live_20211125_215206_

但第一个字符串在 Group-1 中不匹配,并且缺少的预期测试字符串 1 提取为 int/2021/11/18/019e1691-614c-4402-a8c1-d0239ad1ac45

对此的任何指示表示赞赏。

谢谢!


正确答案


如果您想要组 1 中的两个值,您可以使用:

^/(?:[id]|na|fm)/([^/\s]*/\d{4}/\d{2}/\d{2}/\S*?)(?:/,|[^_]+_)640(?:\D|$)

模式匹配:

  • ^ 字符串开头
  • / 按字面意思匹配
  • (?:[id]|na|fm) 匹配 i d na fm 之一
  • / 按字面意思匹配
  • ( 捕获组 1
    • [^/\s]*/ 匹配除 / 或空白字符之外的任何字符,然后匹配 /
    • \d{4}/\d{2}/\d{2}/ 匹配类似日期的模式
    • \s*? 匹配可选的非空白字符,尽可能少
  • ) 关闭组 1
  • (?:/,|[^_]+_) 匹配 /, 或除 _ 之外的 1 个以上字符,然后匹配 _
  • 640 按字面意思匹配
  • (?:\d|$) 匹配非数字或断言字符串结尾

查看 regex demogo demo

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《使用单个/通用正则表达式组实现匹配和条件匹配》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>