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