我正在比较2个URL查询字符串,看它们是否相等;但是,如果存在,我想忽略特定的查询参数(总是带有数值)。所以,这两个查询字符串应该相等:
firstName=bobby&lastName=tables¶mToIgnore=2
firstName=bobby&lastName=tables¶mToIgnore=5
所以,我尝试使用REReplaceNoCase函数使用正则表达式替换:
REReplaceNoCase(myQueryString, "¶mToIgnore=[0-9]*", "")
这适用于上面的例子。我将替换应用于两个字符串然后进行比较。问题是我不能确定param将是字符串中的最后一个...以下2个查询字符串也应该相等:
firstName=bobby&lastName=tables¶mToIgnore=2
paramToIgnore=5&firstName=bobby&lastName=tables
所以,我更改了正则表达式,使前面的&符号可选...... "&?paramToIgnore=[0-9]*"
。但是 - 这些字符串仍然不相等,因为我会在其中一个字符串中留下额外的&符号而不是另一个:
firstName=bobby&lastName=tables
&firstName=bobby&lastName=tables
同样,我不能只删除前面的和以及&符号"&?paramToIgnore=[0-9]*&?"
),就像查询参数位于字符串I'的 middle 中一样ll在一个字符串中剥离一个&符号而不是另一个 - 例如
firstName=bobby&lastName=tables¶mToIgnore=2
firstName=bobby¶mToIgnore=5&lastName=tables
将成为
firstName=bobby&lastName=tables
firstName=bobbylastName=tables
我似乎无法理解这个逻辑......任何人都可以帮我解决问题吗?
答案 0 :(得分:4)
如果您不能确定我建议的参数出现的顺序,那么您不会将它们与字符串本身进行比较。
我建议像这样分割字符串:
String stringA = "firstName=bobby&lastName=tables¶mToIgnore=2";
String stringB = "firstName=bobby&lastName=tables¶mToIgnore=5";
String[] partsA = stringA.split("&");
String[] partsB = stringB.split("&");
然后通过数组并以某种方式使paramToIgnore euqal:
for(int i = 0; i < partsA.length; i++)
{
if(partsA[i].startsWith("paramToIgnore"){
partsA[i] = "IgnoreMePlease";
}
}
for(int j = 0; j < partsB.length; j++)
{
if(partsB[i].startsWith("paramToIgnore"){
partsB[i] = "IgnoreMePlease";
}
}
然后你可以对数组进行排序和比较,看它们是否相等:
Arrays.sort(partsA);
Arrays.sort(partsB);
boolean b = Arrays.equals(partsA, partsB);
我很确定这可以使它更紧凑,并提供更好的性能。但是,通过比较你喜欢的字符串,你不得不在某种程度上关心参数的顺序。
答案 1 :(得分:2)
您可以在cflib上使用QueryStringDeleteVar UDF从两个字符串中删除要忽略的查询字符串变量,然后进行比较。
答案 2 :(得分:0)
分两步完成:
答案 3 :(得分:0)
如何在RegEx中使用'或'来匹配开头或结尾的&符号?
¶mToIgnore=[0-9]*|paramToIgnore=[0-9]*&
中进行测试时,似乎可以胜任这项工作
答案 4 :(得分:0)
尝试将其更改为:
REReplaceNoCase(myQueryString,“&amp;?paramToIgnore = [0-9] +”,“”)
plus而不是star应该捕获一个或多个前面匹配的字符。除了0-9之外它不会匹配任何东西,所以如果之后有另一个参数,当它无法匹配任何数字时它会停止。
或者,您可以使用:
REReplaceNoCase(myQueryString,“&amp;?paramToIgnore = [^&amp;]”,“”)
这将匹配除&符号之外的任何东西。如果参数存在但没有值,它将覆盖案例;这可能是你想要考虑的事情。