replaceAll不会影响字符串

时间:2016-08-21 07:37:10

标签: java regex

我尝试在replaceAll函数中使用正则表达式。我需要做一个真正简单的任务,就是用一个没有空格的char来切换ever =和〜运算符!

例如:

(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函数执行此操作?它似乎不适用于正则表达式。

2 个答案:

答案 0 :(得分: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*

答案 1 :(得分:0)

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

对我来说很好用