java - Matcher LookingAt 方法匹配空字符串

标签 java regex

我使用 Matcher 实例通过 lookingAt() 方法在某些输入的开头匹配模式。然而,当我从空字符串创建 Pattern 并尝试将其与非空(修剪过的)字符串匹配时,lookingAt() 返回 true。

首先,这正如我所期望的:

String field = "Dave went to Alabama"

String escapedQuery = Pattern.quote("Dave went");
Pattern pattern = Pattern.compile(escapedQuery, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(field);
// matcher.lookingAt() == true

但是,从空字符串生成的此模式也会返回 true:

String escapedQuery = Pattern.quote("");
Pattern pattern = Pattern.compile(escapedQuery, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(field);
//matcher.lookingAt() == true

在编译任何模式之前,所有涉及的字符串都已被修剪。

有人能指出我在这里缺少什么吗?

非常感谢。

最佳答案

这是一个一致性问题。空模式就像空字符串,如果你尝试

System.out.println( "abc".indexOf("") );

您会看到这是在偏移量 0 处找到的。

显然,在长度 > 0 的字符串中,甚至在长度为 0 的字符串中,在许多地方都可以找到长度为 0 的子字符串!

关于java - Matcher LookingAt 方法匹配空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24943239/

相关文章:

java - 为什么我的音频播放会卡住ActionListners?

java - 创建具有字符串格式的 Java 字符串变量

java - 对象列表的 Spring @NotNull 验证约束未显示所需的元素名称

java - 正则表达式 - 字符串匹配错误输出

java - 字符串模式查找,正则表达式是否适用于我的要求?

python - 如何限制正则表达式中出现的某些字符

java - 计算 NS2 中 UDP 数据包的哈希值

java - 确保 PipedOutputStream 阻塞(刷新?)

php - 使用正则表达式以任意顺序匹配多个单词

c# - 根据 [].[] + [].[] 中的正则表达式 [].[] 和 [].[] 拆分字符串