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]
我正在尝试获取给定字符串的 '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]