gpt4 book ai didi

java - 正则表达式与空格/非数字/单词边界匹配解释

转载 作者:行者123 更新时间:2023-12-01 22:05:03 25 4
gpt4 key购买 nike

我们有以下代码

String str = "ABC 2015 ABC1";
Pattern pattern = Pattern.compile("\\b\\w+\\D\\b");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(">" + matcher.group() + "<");
}

我们的假设是,它应该将 ABC 和 2015 与周围的单词边界(不消耗字符)匹配,w+ 单词字符匹配子字符串本身,然后将非数字\D 匹配空白。 ABC1 不应匹配,因为后面没有空格

结果打印输出

>ABC <
>2015 <

似乎证实了这一点,但是稍微改变 str 开始引起怀疑上述匹配解释是否正确。例如

  • 将其修改为带有尾随空格的“ABC 2015 ABC1 ”似乎会产生完全相同的结果,但与 >ABC1 不匹配<

  • 将其修改为没有尾随空格的“ABC”会产生 >ABC< 似乎表明\D 现在可能与“C”匹配,因此 w+ 不会贪婪地消耗所有字母字符

  • 将其修改为带有尾随空格的“ABC”会再次产生 >ABC<,进一步混淆情况

如果有人能解释什么是正确的解释,我们将不胜感激

最佳答案

and then non-digit \D for the whitespace.

但是空白和下一个字符之间不存在单词边界。

你的正则表达式必须是,

"\\b\\w+(?=\\s)"

关于java - 正则表达式与空格/非数字/单词边界匹配解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32952128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com