【问题标题】:Using Pattern and Matcher to search for special characters (Example: $)使用 Pattern 和 Matcher 搜索特殊字符(示例:$)
【发布时间】:2018-11-20 01:34:18
【问题描述】:

如果这个问题已经得到解答,我们深表歉意。

我正在使用以下代码来搜索子字符串:

String subject = "ABC"
String subString = "AB"
Pattern pattern = Pattern.compile(subString, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(subject);

while (matcher.find()){
//Matched
}

但是当我的主题字符串以 $ 开头时,它不起作用,因为它是一个特殊字符。

String subject = "$ABC"
String subString = "$"

如何处理?

【问题讨论】:

    标签: java regex pattern-matching


    【解决方案1】:

    通过转义 subString 中的特殊字符。喜欢,

    String subString = "\\$";
    

    告诉Pattern 匹配文字。喜欢,

    Pattern pattern = Pattern.compile(subString, Pattern.LITERAL | Pattern.CASE_INSENSITIVE);
    

    【讨论】:

    • 如果您事先不知道要搜索什么,Pattern.quote 是您的朋友。
    【解决方案2】:

    正则表达式中的元字符很少。其中一些由java中的正则表达式支持的是

    ( ) [ ] { { \ ^ $ | ? * + . < > - = !
    

    所以 $ 在这里确实是一个元字符。元字符向正则表达式引擎传达了特殊含义,因此不能按字面意思使用。因此,为了使用它们,您必须将它们与反斜杠 \

    的转义字符结合使用

    所以String subject = "\\$ABC" String subString = "\\$"

    会的。与其他正则表达式引擎不同,Java 使用双反斜杠而不是单反斜杠作为转义字符。

    【讨论】:

    • “Java 使用双反斜杠而不是单反斜杠”不正确; Java 使用单个反斜杠,就像其他正则表达式一样。例如,如果您在程序运行时查看调试器中的“主题”或“子字符串”变量,您会发现字符串值包含一个反斜杠。需要双反斜杠纯粹是为了逃避字符串值的反斜杠(类似于“\n”等),而不是正则表达式。
    • 是的。我的坏我只是忘记了这是转义字符的情况
    猜你喜欢
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2012-06-10
    • 1970-01-01
    相关资源
    最近更新 更多