我正在从字符串(链接)中提取一段字符串:
https://arteptweb-vh.akamaihd.net/i/am/ptweb/100000/100000/100095-000-A_0_VO-STE%5BANG%5D_AMM-PTWEB_XQ.1V7rLEYkPH.smil/master.m3u8
期望输出应为1000000/1000000/100095-000- a_
我正在使用Golang风味的Regex^.*?(/[i,na,fm,d]([,/]?)(/am/ptweb/|.+=.+,))([^_]*).*?$
,我只能获得具有以下输出的第4组1000000/1000000/100095-000- a
但是我想在a后面加上下划线
有点卡住了,任何帮助都很感激。
可以使用
(/(i|na|fm|d)(/am/ptweb/|.+=.+,))([^_]*_?)
参见regex演示。
细节:
(/(i|na|fm|d)(/am/ptweb/|.+=.+,))
-第一组:/
- a/
char(i|na|fm|d)
-组2:i
、na
、fm
或d
(/am/ptweb/|.+=.+,)
-组3:/amp/ptweb/
或一个或多个字符尽可能多(换行字符除外),=
,一个或多个字符尽可能多(换行字符除外)和,
字符
([^_]*_?)
- Group 4:除_
之外的零个或多个字符,然后是可选的_
。
您可以在A
后面匹配下划线,如:
^.*?(/(?:[id]|na|fm)([,/]?)(/am/ptweb/|.+=.+,))([^_]*_).*$
查看regex演示
关于您尝试的模式的一些注意事项:
- 这个符号是一个字符类
[i,na,fm,d]
,它应该是一个分组(?:[id]|na|fm)
- 在此组
([,/]?)
中,您可以选择捕获,
或/
,因此理论上它可以匹配具有/i//am/ptweb/
的字符串 - 最后一部分
.*?$
不必是非贪婪的,因为它是模式的最后一部分 - 这部分
[^_]*
也可以匹配空格和换行符