我有这样的 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
试试这个:
(?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']