Java matcher找不到匹配项,即使正则表达式单独工作

Java matcher找不到匹配项,即使正则表达式单独工作,java,regex,find,matcher,Java,Regex,Find,Matcher,我试图获取给定字符串的“摘要”,并将其作为值放入HashMap中。我说的“triser”是指以单词边界结尾的子字符串(最多50个字符) 下面是一个代码示例,展示了我是如何做到这一点的: import java.util.regex.*; public class Test { public static void main(String[] args) throws Exception { final Pattern

我试图获取给定字符串的“摘要”,并将其作为值放入HashMap中。我说的“triser”是指以单词边界结尾的子字符串(最多50个字符)

下面是一个代码示例,展示了我是如何做到这一点的:

import java.util.regex.*;             

public class Test {                    
  public static void main(String[] args) throws Exception {
    final Pattern pattern = Pattern.compile("(^.{0,50}\b)"); 
    final Matcher m = pattern.matcher(
        "This is a long string that I want to find a shorter teaser for."); 
    if (m.find()) {
      System.out.println("Found: " + m.group(1)); 
    } else {  
      System.out.println("No match");   
    }                                                          
  }             
}    
我希望它能打印:

Found: This is a long string that I want to find a
但它却打印:

No match
如果我单独测试这个正则表达式,它会做它应该做的事情——它会找到一个最大长度为50个字符的值的子字符串,并在单词边界上结束。但是如果我调试它,m.find总是会给我一个错误

有什么办法解决这个问题吗?(我的重点是获取摘要,而不是使用Matcher.find();-)

根据\b是字符串中退格的转义序列。但是,您需要\b单词边界的正则表达式,因此需要将斜杠更改为文字斜杠,即\\以便Pattern.compile可以看到\b

Pattern.compile("(^.{0,50}\\b)")
通过对字符串调用.toCharArray()可以看到这种效果

单斜杠

System.out.println(Arrays.toString("\b".toCharArray()));
=> []
双斜杠

System.out.println(Arrays.toString("\\b".toCharArray()));
=> [\, b]

使用:
Pattern.compile((^.{0,50}\\b)”)
和Anubhava说的一样,声明您的模式。在循环外编译。你不必每次都创建它们,这次也需要thx。。把它从所有的循环中弄出来。噢!非常感谢,第二个斜杠是wat,但它不见了。。现在一切都很好!