我想知道我的字符串是否具有= & &序列。如果是的话,我想编码第二个&。如何使用Java正则表达式我可以找到它?Java正则表达式查找字符串中的字符序列
我的字符串是这样的:
A =猫& B =狗猫& & C =猴子
感谢 切塔尼亚
我想知道我的字符串是否具有= & &序列。如果是的话,我想编码第二个&。如何使用Java正则表达式我可以找到它?Java正则表达式查找字符串中的字符序列
我的字符串是这样的:
A =猫& B =狗猫& & C =猴子
感谢 切塔尼亚
像Mosty和Ted建议的,也许最好的方法是通过检测和转义'&'。
但是,如果你想有一个单一的正则表达式做的工作对你来说,那就是:
String s = "a=cat&b=dog&cat&c=monkey";
s = s.replaceAll("&(?=[^=]*&)", "&");
System.out.println(s);
它的工作。你能解释一下这个正则表达式吗? –
很高兴帮助:) 正则表达式有两种基本部分组成: '&'' (?= [^ =] *)' 第一部分检测 '&',这是你想要的字符取代。 第二部分更棘手。您需要确保在刚刚检测到的'&'之后,下一个字符序列包含另一个“&”,并且在下一个“&”之前包含另一个“=”。 –
您可以通过使用零宽度积极的前瞻来做到这一点。这个特殊的构造让我们测试一下您的比赛中“前方”角色的一个给定条件。 语法如下: '(?= X)' 其中X是您想要测试的条件。在这种情况下,X是: '[^ =] *&' 或换句话说:“任何不是'='的字符,零次或多次,后跟一个'&'”。所以最后你得到'&(?= [^ =] *&)',这意味着:“一个'&'的下一个字符序列没有'='直到下一个'&'” 。 –
你为什么不只是split它?
通过“&”第一次分裂,然后在第二个元素
您可以使用此格式:
if (string.contains("=&&"))
{
// do something
}
else
{
// do something else
}
我不知道你所说的“编码&”,虽然意思。你能澄清吗?
忘记编码。道歉。 我想知道a =猫&b =狗&猫&c =猴子有=和一些字符&和一些字符和模式在里面。 –
在形成连接的名称 - 值对字符串之前,在值中转义&
会更容易。但是,鉴于已编码的字符串,我觉得Mosty的建议的变体可能更适合:
String escapeAmpersands(String nvp) {
StringBuilder sb = new StringBuilder();
String[] pairs = nvp.split("&");
if (pairs[0].indexOf('=') < 0) {
// Maybe do something smarter with "a&b=cat&c=dog"?
throw new Exception("Can't handle names with '&'");
}
sb.append(pairs[0]);
for (int i = 1; i < pairs.length; ++i) {
String pair = pairs[i];
sb.append(pair.indexOf('=') < 0 ? "&" : "&");
sb.append(pair);
}
return sb.toString();
}
这很可能是比普通快试图用正则表达式来做到这一点。
您是否在寻找确切'= &&'的字符串,也可以有其他的字符之间'=','&',第二个'&'? –
a =猫&b =狗&猫&c =猴子 不完全= &&,但有一些字符在=和&和&之间,如上面的字符串。 –