过去几天一直困扰着我,我似乎无法找到答案。请考虑以下事项:
我有一个名为"options"
的字符串,格式为:
"xxx=true&yxxx=true&zzz=false"
(是的,就像URL查询一样)。
我设置了模式匹配器:
Pattern pattern1 = Pattern.compile("xxx=true");
Pattern pattern2 = Pattern.compile("yxxx=true");
Pattern pattern3 = Pattern.compile("zzz=true");
我的问题在于区分第二个和第一个模式,因为pattern1在yxxx=true
情况下找到匹配,因为它包含"xxx=true"
字符串。我到处寻找,并且可以将第一个模式拆分为"&xxx=true"
和"^xxx=true"
以覆盖“行首”和其他所有情况,但我只知道必须有其他方式这样做。
答案 0 :(得分:0)
你需要使用负向后仰匹配
所以你的模式应该是
Pattern pattern1 = Pattern.compile("(?<!y)xxx=true");
Pattern pattern2 = Pattern.compile("yxxx=true");
Pattern pattern3 = Pattern.compile("zzz=true");
答案 1 :(得分:0)
如果参数和值仅包含小写字母,则可以使用单个模式
(?:^|&)([a-z]+)=([a-z]+)(?:&|$)
使用多行匹配来匹配参数和值,然后迭代所有匹配并检查此次匹配的参数。即使参数名称或其顺序发生变化,这也会起作用。
另一种方法是将此参数字符串解析为URL参数字符串。