Java正则表达式来查找字符串中的字符序列

Java正则表达式来查找字符串中的字符序列,java,regex,Java,Regex,我想知道我的字符串中是否有=&&序列。如果是,那么我想编码第二个&。如何使用java正则表达式找到它 我的字符串是这样的: a=猫&b=狗&c=猴子 谢谢 柴坦尼亚你为什么不就这么做呢 首先用“&”分开,然后取第二个元素为什么不直接用它呢 首先将其拆分为“&”,然后使用第二个元素您可以使用以下格式: if (string.contains("=&&")) { // do something } else { // do something else } 我不知道你说的“编码

我想知道我的字符串中是否有=&&序列。如果是,那么我想编码第二个&。如何使用java正则表达式找到它

我的字符串是这样的:

a=猫&b=狗&c=猴子

谢谢 柴坦尼亚

你为什么不就这么做呢

首先用“&”分开,然后取第二个元素

为什么不直接用它呢


首先将其拆分为“&”,然后使用第二个元素

您可以使用以下格式:

if (string.contains("=&&"))
{
 // do something
}
else
{
 // do something else
}

我不知道你说的“编码&”是什么意思。你能澄清一下吗

您可以使用以下格式:

if (string.contains("=&&"))
{
 // do something
}
else
{
 // do something else
}

我不知道你说的“编码&”是什么意思。你能澄清一下吗

在形成串联的名称-值对字符串之前,更容易在值中转义
&
。但考虑到一个已经编码的字符串,我认为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 ? "&amp;" : "&");
        sb.append(pair);
    }
    return sb.toString();
}
String escapeAmpersands(字符串nvp){
StringBuilder sb=新的StringBuilder();
字符串[]对=nvp.split(&);
if(对[0].indexOf('=')<0){
//也许用“a&b=猫&c=狗”做些更聪明的事?
抛出新异常(“无法处理带有“&”的名称);
}
sb.追加(对[0]);
对于(int i=1;i

这可能比使用正则表达式执行此操作要快。

在形成串联的名称-值对字符串之前,更容易在值中转义
&
。但考虑到一个已经编码的字符串,我认为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 ? "&amp;" : "&");
        sb.append(pair);
    }
    return sb.toString();
}
String escapeAmpersands(字符串nvp){
StringBuilder sb=新的StringBuilder();
字符串[]对=nvp.split(&);
if(对[0].indexOf('=')<0){
//也许用“a&b=猫&c=狗”做些更聪明的事?
抛出新异常(“无法处理带有“&”的名称);
}
sb.追加(对[0]);
对于(int i=1;i

这可能比使用正则表达式执行此操作要快。

就像Mosty和Ted建议的那样,最好的方法可能是检测并转义“&”

但是,如果您想要一个正则表达式为您完成这项工作,那么它就是:

String s = "a=cat&b=dog&cat&c=monkey";

s = s.replaceAll("&(?=[^=]*&)", "&amp;");

System.out.println(s);

正如Mosty和Ted所建议的那样,也许最好的方法是检测并逃离“&”

但是,如果您想要一个正则表达式为您完成这项工作,那么它就是:

String s = "a=cat&b=dog&cat&c=monkey";

s = s.replaceAll("&(?=[^=]*&)", "&amp;");

System.out.println(s);

您是在字符串中准确地查找
=&&
,还是在
=
&
和第二个
&
之间可能有其他字符?a=cat&b=dog&cat&c=monkey不准确地查找=&&但在=和&和&之间有一些字符,如上面的字符串中所示。您是在字符串中准确地查找
=&
,或者在
=
&
和第二个
&
之间可能还有其他字符吗?a=cat&b=dog&cat&c=monkey不完全是=&&而是在=和&之间有一些字符,就像上面的字符串一样。忘记编码吧。道歉。我想知道a=cat&b=dog&cat&c=monkey中有=和一些字符&以及一些字符和模式..忘记编码吧。道歉。我想知道a=cat&b=dog&cat&c=monkey中有=和一些字符&和一些字符&模式..很高兴能提供帮助:)正则表达式基本上有两个部分:
&
(?=[^=]*&
第一部分检测到一个“&”,这是您要替换的字符。第二部分比较棘手。您需要确保在刚刚检测到的“&”之后,下一个字符序列包含另一个“&”且在下一个“&”之前不包含“=”。您可以使用零宽度正向前瞻来实现这一点。此特殊构造让您测试匹配前的字符的给定条件。其语法为:
(?=X)
,其中X是要测试的条件。在本例中,X是:
[^=]*&
或者换句话说:“任何不带'=',零次或多次,后跟'&')的字符。因此,最后您得到了
&(?=[^=]*&)
,这意味着:“一个'&'字符序列在下一个'&'之前没有'='。很高兴能够提供帮助:)正则表达式基本上有两部分:
&
(?=[^=]*&)
第一部分检测到一个'&',这是您要替换的字符。第二部分比较棘手。您需要确保在刚刚检测到的“&”之后,下一个字符序列包含另一个“&”且在下一个“&”之前不包含“=”。您可以使用零宽度正向前瞻来实现这一点。此特殊构造让您测试匹配前的字符的给定条件。其语法为:
(?=X)
,其中X是要测试的条件。在本例中,X是:
[^=]*&
或者换句话说:“任何不带'=',零次或多次,后跟'&')的字符。因此,最后您会得到
&(?=[^=]*&)
,这意味着:“一个'&',其以下字符序列在下一个'&'之前没有'='。”。