当前位置:  开发笔记 > 编程语言 > 正文

转义String以获取在Java中解析的正则表达式

如何解决《转义String以获取在Java中解析的正则表达式》经验,为你挑选了3个好方法。

在Java中,假设我有一个String变量S,我想在另一个String T中搜索它,如下所示:

   if (T.matches(S)) ...

(注意:上面的行是T.contains(),直到有几篇文章指出该方法不使用正则表达式.我的不好.)

但现在假设S可能有令人讨厌的角色.例如,设S ="[hi".左方括号将导致正则表达式失败.是否有一个函数我可以调用来逃避S,这样就不会发生这种情况?在这种特殊情况下,我希望将其转换为"\ [hi".



1> Tom Hawtin -..:

String.contains不使用正则表达式,因此在这种情况下没有问题.

如果需要正则表达式,而不是使用正则表达式特殊字符拒绝字符串,请使用java.util.regex.Pattern.quote来转义它们.



2> Michael Myer..:

正如Tom Hawtin所说,你需要引用这种模式.你可以用两种方式做到这一点(编辑:实际上是三种方式,正如@ diastrophism所指出的那样):

    用"\ Q"和"\ E"围绕字符串,如:

    if (T.matches("\\Q" + S + "\\E"))
    

    改用模式.代码将是这样的:

    Pattern sPattern = Pattern.compile(S, Pattern.LITERAL);
    if (sPattern.matcher(T).matches()) { /* do something */ }
    

    这样,您可以缓存已编译的Pattern并重用它.如果你不止一次使用同一个正则表达式,你几乎肯定想要这样做.

请注意,如果您使用正则表达式来测试字符串是否在更大的字符串中,则应将.*放在表达式的开头和结尾.但是如果你引用模式,这将不起作用,因为它将寻找实际的点.那么,你绝对肯定你想要使用正则表达式吗?



3> Diastrophism..:

试试Pattern.quote(String).它将修复字符串中具有特殊含义的任何内容.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有