【发布时间】:2019-08-20 17:38:16
【问题描述】:
我都使用过这个Java specific 正则表达式测试器和Regex101's 测试器
并且两者都可以找到以 # 开头的换行符的所有 4 个匹配项,如下面的示例字符串所示。字符串数据来自一个 UTF-8 文件。
#1
#2
#3
#4
但在 Android 中运行下面的 Java 代码时,只有 #2, #3, #4 是肯定匹配的。 编辑:我发现在 #1 上方放置一个空行会使其匹配,这解释了为什么所有其他人都得到匹配,因为它们上面都有空行
Java 代码:
Pattern pattern = Pattern.compile("^#.*", Pattern.CASE_INSENSITIVE |
Pattern.MULTILINE);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
for (int i = 0; i <= matcher.groupCount(); i++) {
String foundWord = matcher.group(i);
}
}
就像matcher.find() 完全跳过了第一行
【问题讨论】:
-
您可以使用
^[\t ]*#.*来说明可能出现在#之前的随机空格 -
@MonkeyZeus 我尝试使用它,但它与其他模式相同
-
@MonkeyZeus 是因为#前面有一个空格。
-
它与什么“其他”模式相同?我的模式与您的不同,因为它考虑了前导空格,这将解决您的 Java 问题。
-
@Andreas 是的,你完全正确。我的文本确实来自 UTF-8 文件并被加载到
String变量中。我会调查这个我以前从未遇到过的“bom”