2011-10-03 64 views
0

我想知道我的字符串是否具有= & &序列。如果是的话,我想编码第二个&。如何使用Java正则表达式我可以找到它?Java正则表达式查找字符串中的字符序列

我的字符串是这样的:

A =猫& B =狗猫& & C =猴子

感谢 切塔尼亚

+0

您是否在寻找确切'= &&'的字符串,也可以有其他的字符之间'=','&',第二个'&'? –

+0

a =猫&b =狗&猫&c =猴子 不完全= &&,但有一些字符在=和&和&之间,如上面的字符串。 –

回答

3

像Mosty和Ted建议的,也许最好的方法是通过检测和转义'&'。

但是,如果你想有一个单一的正则表达式做的工作对你来说,那就是:

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

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

System.out.println(s); 
+0

它的工作。你能解释一下这个正则表达式吗? –

+0

很高兴帮助:) 正则表达式有两种基本部分组成: '&'' (?= [^ =] *)' 第一部分检测 '&',这是你想要的字符取代。 第二部分更棘手。您需要确保在刚刚检测到的'&'之后,下一个字符序列包含另一个“&”,并且在下一个“&”之前包含另一个“=”。 –

+0

您可以通过使用零宽度积极的前瞻来做到这一点。这个特殊的构造让我们测试一下您的比赛中“前方”角色的一个给定条件。 语法如下: '(?= X)' 其中X是您想要测试的条件。在这种情况下,X是: '[^ =] *&' 或换句话说:“任何不是'='的字符,零次或多次,后跟一个'&'”。所以最后你得到'&(?= [^ =] *&)',这意味着:“一个'&'的下一个字符序列没有'='直到下一个'&'” 。 –

2

你为什么不只是split它?

通过“&”第一次分裂,然后在第二个元素

0

您可以使用此格式:

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

我不知道你所说的“编码&”,虽然意思。你能澄清吗?

+0

忘记编码。道歉。 我想知道a =猫&b =狗&猫&c =猴子有=和一些字符&和一些字符和模式在里面。 –

0

在形成连接的名称 - 值对字符串之前,在值中转义&会更容易。但是,鉴于已编码的字符串,我觉得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(); 
} 

这很可能是比普通快试图用正则表达式来做到这一点。

相关问题