regex 是否可以在同一个正则表达式中对捕获组执行正则表达式?

busg9geu  于 2023-01-18  发布在  其他
关注(0)|答案(2)|浏览(291)

我有一个正则表达式(?i)(?<=srcset=\")([^\"]+),它匹配页面html源代码中srcset的内容,它工作正常,现在我想用类似http[^ ]+的东西从捕获组中提取所有的url--但是我只能得到一个,不管我怎么试。
下面是一个例子:(?i)(?<=srcset=\")((http[^\s]+).*?)+(?=\")
问题是:将两个运算合并到一个表达式中非常重要。
有什么想法吗?
源代码:

srcset="https://www.thesite.nl/wp-content/uploads/2016/02/logo-home.png 793w, https://www.thesite.nl/wp-content/uploads/2016/02/logo-home-300x201.png 300w, https://www.thesite.nl/wp-content/uploads/2016/02/logo-home-768x514.png 768w, https://www.thesite.nl/wp-content/uploads/2016/02/logo-home-700x469.png 700w"
pqwbnv8z

pqwbnv8z1#

如果支持,您可以使用\G anchor链接匹配:

(?i)(?:\G(?!^)|srcset=")[^"]*?\b(https?:[^"\s,]+)

See this demo at regex101

  • (?:\G(?!^)|srcset=")eithersrcset="匹配或继续上一匹配
  • [^"]*?缓慢匹配非双引号的any amount(链接之间)
  • \b(https?:[^"\s,]+)capture链接到 * 第一个组 *,从word boundary开始
zzwlnbp8

zzwlnbp82#

使用xidel,一个适当的HTML解析器,使用xpath

xidel -e 'tokenize(//img/@srcset, "\s+\w+,?\s*")' -s file.html

输出

https://www.thesite.nl/wp-content/uploads/2016/02/logo-home.png
https://www.thesite.nl/wp-content/uploads/2016/02/logo-home-300x201.png
https://www.thesite.nl/wp-content/uploads/2016/02/logo-home-768x514.png
https://www.thesite.nl/wp-content/uploads/2016/02/logo-home-700x469.png

相关问题