这个问题在这里已有答案:
我正在研究Android项目,我想删除/替换我的url中的某个param,即
PARAMS = 12143
所以我写了一个正则表达式来评估网址
(?<=[?&])?params=(.*?)(&|$)
它完美地适用于在线测试工具,我也为它编写了单元测试,它通过没有任何问题。样品测试如下
https://example.com/xyz - >不匹配
https://example.com/xyz?params = 123456 - >匹配
https://example.com/xyz?another=124¶ms = 123456 - >匹配
https://example.com/xyz?another=124¶ms = 123456&yetanother = 2425 - >匹配
然后我在真实设备上测试了它,Android抛出了带有消息的PatternSyntaxException
索引10附近的regexp模式中的语法错误(?<= [?&])?params =(。*?)(&| $)
找出可选的?在params引起异常之前。我删除了它,它适用于单元测试和真实设备。
所以这是我的问题:为什么我的正则表达式失败了?仅在真实设备上,而不是单元测试或在线工具?
你需要像这样逃避你的特殊char ?
:
(?<=[?&])\\?params=(.*?)(&|$)