2016-08-21 73 views
-2

我试图在replaceAll函数中使用正则表达式。我需要做一个真正简单的任务,就是用一个不带空格的字符切换ever =和〜运算符!replaceAll不影响字符串

例如:

(srcIP = 0.0.0.0) AND (dstIP~0.0.0.0 OR protocol =  TCP) 

变成

(srcIP:0.0.0.0) AND (dstIP:0.0.0.0 OR protocol:TCP) 

我尝试使用下面的代码

query.replaceAll("[ ]*(=|~)[ ]*", ":"); 

,但它不工作。有没有办法使用replaceAll函数来做到这一点?它似乎不适用于正则表达式。

+0

'replaceAll'和'replace'不改变'String',他们创造一个新的。 – QBrute

回答

0

System.out.println("(srcIP = 0.0.0.0) AND (dstIP~0.0.0.0 OR protocol = TCP)".replaceAll("[ ]*(=|~)[ ]*", ":")); 

工作正常,我

2

你的正则表达式是罚款(尽管它可以改进)。证明:

System.out.println("(srcIP = 0.0.0.0) AND (dstIP~0.0.0.0 OR protocol = TCP)".replaceAll("[ ]*(=|~)[ ]*", ":")); 

打印:

(srcIP:0.0.0.0) AND (dstIP:0.0.0.0 OR protocol:TCP) 

字符串是不可变Java中,replaceAll没有修改字符串原地的,它返回一个新的。你可能没有把结果分配回去。

你的正则表达式可以改写为:

\\s*[=~]\\s* 
+0

你是完全正确的,我忘了它是永恒的谢谢。 – user3741859

相关问题