Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式与转义_Java_Regex - Fatal编程技术网

Java 正则表达式与转义

Java 正则表达式与转义,java,regex,Java,Regex,抱歉,如果有人问这个问题,我的搜索带来了许多离题帖子 我正在尝试将通配符从用户定义的搜索字符串(通配符为“*”)转换为类似PostgreSQL的通配符“%” 我想处理转义,以便“%”=>“\%”和“\*”=>“*” 我知道在替换*之前,我可以先用其他东西替换\*,然后再将其交换回去,但我不希望这样做,而是只使用一种模式转换*,该模式在不进行\操作时选择它 String convertWildcard(String like) { like = like.replaceAll("%", "

抱歉,如果有人问这个问题,我的搜索带来了许多离题帖子

我正在尝试将通配符从用户定义的搜索字符串(通配符为“*”)转换为类似PostgreSQL的通配符“%”

我想处理转义,以便
“%”=>“\%”
“\*”=>“*”

我知道在替换
*
之前,我可以先用其他东西替换
\*
,然后再将其交换回去,但我不希望这样做,而是只使用一种模式转换
*
,该模式在不进行
\
操作时选择它

String convertWildcard(String like)
{
    like = like.replaceAll("%", "\\%");
    like = like.replaceAll("\\*", "%");
    return like;
}

Assert.assertEquals("%", convertWildcard("*"));
Assert.assertEquals("\\%", convertWildcard("%"));
Assert.assertEquals("*", convertWildcard("\\*")); // FAIL

Assert.assertEquals("a%b", convertWildcard("a*b"));
Assert.assertEquals("a\\%b", convertWildcard("a%b"));
Assert.assertEquals("a*b", convertWildcard("a\\*b")); // FAIL
欢迎提出意见

编辑

澄清一下,

我需要一个方法,该方法可以进行1个或多个
String.replaceAll
调用来转换字符串,以便

  • 出现的
    %
    变为
    \%
  • 出现的
    *
    变为
    %
  • 出现的
    \*
    变为
    *
最好的答案是使用最少的调用
String.replaceAll

您需要所谓的“负面查找”。要选择前面没有
\
的所有
%

(?(纯正则表达式)

要在Java中使用它,您需要添加一些屏蔽:


string.replaceAll(“(?请注意,在某些断言测试中,反斜杠转义得不够。请参阅标记为“正则表达式、文字字符串和反斜杠”的部分“在

中,我真的不明白这个问题。你能澄清一下你想做什么以及问题是什么吗?谢谢塞格,为了符合这个问题,你的答案是
like=like.replaceAll(“%”),“\\\%”;like=like.replaceAll(“?实际上,最后一个replaceAll应该是
like=like.replaceAll(“\ \*”,“*”)
啊,你说得对……我应该在发帖之前运行它,呃;)