如何用正则从两种格式的URL中提取指定子串?
正则表达式解决方案
可以使用以下正则表达式提取目标子串:
(?<=/a[-/])[^=]+
解释:
(?<=/a[-/]):正向肯定后行断言,匹配/a后紧跟-或/的位置,同时覆盖/a-/和/a/两种前缀格式。[^=]+:匹配任意非=的字符序列,直到遇到第一个=为止,正好对应需要提取的目标子串。
兼容性替代方案(捕获组方式)
如果你的正则引擎不支持后行断言(比如旧版本JavaScript),可以用捕获组实现:
/a[-/]/([^=]+)
提取结果时取第一个捕获组的内容即可。
验证示例
对两种目标URL测试:
- 输入:
https://lh3.googleusercontent.com/a-/ACB-R5TGDRSAuE76Tt1ZPa5qPv9cp23QLaJfni84B7MXrcI=s120-c-c0x00000000-cc-rp-mo-br100
提取结果:ACB-R5TGDRSAuE76Tt1ZPa5qPv9cp23QLaJfni84B7MXrcI - 输入:
https://lh3.googleusercontent.com/a/ACB-R5TGDRSAuE76Tt1ZPa5qPv9cp23QLaJfni84B7MXrcI=s120-c-c0x00000000-cc-rp-mo-br100
提取结果:ACB-R5TGDRSAuE76Tt1ZPa5qPv9cp23QLaJfni84B7MXrcI
原正则的问题
你之前使用的(?<=/a/)(.*?)=仅匹配了/a/前缀的情况,没有覆盖/a-/的格式,因此无法处理第二种URL。
内容的提问来源于stack exchange,提问作者Saurabh Puri
相关产品推荐
相关产品推荐

