正则表达式提取查询字符串参数值,可能是 URL 编码

问题描述 投票:0回答:1

我有这样的 URL,查询带有一个名为“myParamName”(case INsensitive)的参数,该参数应该有一个 numeric 值。 例如:

https://website.com/something?myParamName=123&a=b

此 URL 本身作为实际查询字符串参数传递到另一个页面,称为“goto”。 URL 必须经过编码才能由 anothersite.com 正确处理

https://anothersite.com?goto=https%3A%2F%2Fwebsite.com%2Fsomething%3FmyParamName%3D123%26a%3Db

所以我的正则表达式匹配的输入值为:

goto=https%3A%2F%2Fwebsite.com%2Fsomething%3FmyParamName%3D123%26a%3Db

注意

myParamName%3D123
而不是
myParamName=123
。 所以我需要做的是提取紧随 either
=
or
%3d
or
%3D

的数值

我尝试过得到 = 或 %3D,但没有得到它后面的数值

(?i)myParamName(=|%3d)[^&]

有人可以给我一点帮助吗,如何提取 = 或 %3d 之后的数值?

Regex101.com 示例: https://regex101.com/r/hResKm/1

regex regex-lookarounds
1个回答
0
投票

试试这个:

(?i)myParamName(?:=|%3d|%3D)([^&][0-9]+)

regex101 和 python 上工作:

import re

tests = """myParamName123
myParamName&a
myParamName&123
myParamName=asdf
myParamName=999+123
myPaRAMName=123
myParamName%3d456""".split('\n')

pattern = r"(?i)myParamName(?:=|%3d|%3D)([^&][\d]+)"

for test in tests:
    print(test, '-->', re.findall(pattern, test))

输出:

myParamName123 --> []
myParamName&a --> []
myParamName&123 --> []
myParamName=asdf --> []
myParamName=999+123 --> ['999']
myPaRAMName=123 --> ['123']
myParamName%3d456 --> ['456']
© www.soinside.com 2019 - 2024. All rights reserved.