wget使用--accept-regex无法匹配URL中&符号该如何解决?
问题核心原因
wget的--accept-regex使用POSIX扩展正则语法,要求完全匹配完整的请求URL(而非匹配子串),同时你混淆了HTML转义符和实际URL的字符:HTML源码里的&是&的转义写法,wget解析页面链接时会自动还原为&作为实际请求的URL参数分隔符,不需要匹配&。
正确写法
你只需要给正则前后加通配符.*适配完整URL,用单引号包裹正则避免shell转义即可,参考完整命令:
wget --limit-rate=100k -m -nH -np -p -E -k -l 4 --accept-regex '.*pagingSize=50&sorting=price_desc.*' -r https://www.website.com/foo/bar
如果担心&的转义冲突,也可以用字符集写法规避风险:
--accept-regex '.*pagingSize=50[&]sorting=price_desc.*'
之前写法失效的原因
- 所有正则都没有加前后
.*,无法匹配完整URL(wget要求全匹配,不能只匹配中间的参数部分) - 错误使用
&作为匹配目标,实际请求的URL里不存在该字符串 - 部分写法没有用单引号包裹正则,导致
&被shell识别为后台执行符号,参数传递到wget时已经损坏
内容的提问来源于stack exchange,提问作者Ahmet Said Akbulut
相关产品推荐
相关产品推荐

