IIS URL重写中如何用单个正则提取任意顺序的Cookie值
直接用下面这条无分支的单正则即可,捕获组序号完全固定,不受Cookie排列顺序影响:
^(?=.*application_session=([^;]+))(?=.*User_Context=([^;]+)).*$
规则说明
- 核心逻辑用两个正向零宽度断言实现独立匹配,断言本身不会消耗字符串字符,不管
application_session和User_Context两个Cookie在串里谁前谁后,都能准确命中 - 第1个捕获组固定抓取
application_session的取值,永远对应重写规则里的{C:1}引用 - 第2个捕获组固定抓取
User_Context的取值,永远对应重写规则里的{C:2}引用 - 取值部分用
[^;]+而不是.*,是因为Cookie之间用分号分隔,这个写法只会匹配当前Cookie的有效值,不会因为正则贪婪匹配把后面的其他Cookie内容吞进去,后续Cookie串新增其他属性也不会匹配出错,兼容性更好 - 末尾的
.*$是为了适配IIS URL重写模块要求的全字符串匹配校验,不会干扰两个捕获组的正常取值
实际匹配结果
- 输入
application_session=30110020;User_Context=Ghkkaskj228992nkn999时:- {C:1} = 30110020
- {C:2} = Ghkkaskj228992nkn999
- 输入
User_Context=Ghkkaskj228992nkn999;application_session=30110020时:- {C:1} = 30110020
- {C:2} = Ghkkaskj228992nkn999
这个写法没有使用任何分支或逻辑,属于标准单正则表达式,完全符合规则要求,不需要额外调整分支顺序,不管两个Cookie的返回顺序怎么变,引用位置都不会乱。
内容的提问来源于stack exchange,提问作者Birat Adhikari
相关产品推荐
相关产品推荐

