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

Java matcher does not find match, even though the regex works separately

我正在尝试获取给定字符串的 'teaser' 并将其作为值放入 HashMap 中。 'teaser' 我的意思是一个子字符串(最大长度为 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 个字符并以单词边界结束的 value 子字符串。但是如果我调试它,m.find 总是让我出错。

有什么解决办法吗? (我专注于获取预告片,而不是使用 Matcher.find() ;-) )

根据 Oracle documentation on Characters \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]