Java 用于检测单词中特殊字符的模式匹配

Java 用于检测单词中特殊字符的模式匹配,java,regex,Java,Regex,我试图在java中识别字符串末尾的任何特殊字符(“?”、“.”、“,”)。以下是我写的: public static void main(String[] args) { Pattern pattern = Pattern.compile("{.,?}$"); Matcher matcher = pattern.matcher("Sure?"); System.out.println("Input String matches regex - "+matcher.matc

我试图在java中识别字符串末尾的任何特殊字符(“?”、“.”、“,”)。以下是我写的:

public static void main(String[] args) {
    Pattern pattern = Pattern.compile("{.,?}$");
    Matcher matcher = pattern.matcher("Sure?");
    System.out.println("Input String matches regex - "+matcher.matches());

}
当预期为
true
时,返回一个
false
。请建议。

试试这个

Pattern pattern = Pattern.compile(".*[.,?]");
...
使用
“确定?”。匹配(“.[,?]”)

String#匹配(…)
自动使用
^
$
锚定正则表达式,无需手动添加它们。

这是您的代码:

Pattern pattern = Pattern.compile("{.,?}$");
Matcher matcher = pattern.matcher("Sure?");
System.out.println("Input String matches regex - "+matcher.matches());
您有两个问题:

  • 您使用的是
    {and}
    而不是字符类
    [and]
  • 您使用的是
    Matcher\matches()
    而不是
    Matcher\find
    matches
    方法匹配完整的输入行,而
    find
    在字符串中的任何位置执行搜索
  • 将代码更改为:

    Pattern pattern = Pattern.compile("[.,?]$");
    Matcher matcher = pattern.matcher("Sure?");
    System.out.println("Input String matches regex - " + matcher.find());
    

    尝试使用方括号而不是花括号。使用类似于测试和实验正则表达式的站点。如果使用
    匹配()
    方法(请参阅),这将起作用,但如果使用
    查找()
    ,则字符串中的任何位置都有
    ,则会匹配。