在行首或标点符号后查找表达式

时间:2016-06-28 20:31:32

标签: java regex matcher

过去几天一直困扰着我,我似乎无法找到答案。请考虑以下事项:

我有一个名为"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"以覆盖“行首”和其他所有情况,但我只知道必须有其他方式这样做。

2 个答案:

答案 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参数字符串。