如何让正则表达式匹配路径时忽略带有特定'type '前缀的结果
路径匹配正则修改方案
修改后完整正则
(?<!type\s)([^\s\&\=\;\,\<\>\"\'\(\)]+\/[\w\/])([^\"\'\n\;\}\)\s]*)
改动说明
- 新增
(?<!type\s)负向零宽回顾断言:仅当匹配路径的起始位置前不存在type加空格的前缀时,才会继续执行后续匹配逻辑,实现了带type前缀内容的过滤 - 原有路径匹配规则完全保留,不会影响原本可以正常命中的所有合法路径
- 修复了原正则中重复的
<字符冗余问题,不影响原有匹配逻辑
匹配效果验证
针对测试文本Location: /user/login.php xx... /user/login xx... text/html abcd type text/html hey abc/def:
- 命中内容:
/user/login.php、/user/login、abc/def - 排除内容:
type text/html中的text/html,完全符合预期
补充说明:如果需要兼容
type和路径之间存在多个空格的场景,可将断言部分替换为(?<!type\s+),该写法需要正则引擎支持可变长度负向回顾断言,主流编程语言的最新正则引擎均已兼容该特性。
内容的提问来源于stack exchange,提问作者Görkem Hacıoğlu
相关产品推荐
相关产品推荐

