不太理解这段代码的输出结果 - 关于正则表达式

2023-06-01 12:02:47 +08:00
 JasonLaw

为什么 matcher.find()是 true ?明明 regex 里面是 END=,而 input 里面是 ENDING=。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {
        String input = "STARTING=18:00|ENDING=20:00|SLICE_NUMBER=4|";
        String regex = ".*END=([^|]+)|";

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        System.out.println(matcher.find()); // true
        System.out.println(matcher.group(1)); // null
    }
}
924 次点击
所在节点    程序员
3 条回复
jifengg
2023-06-01 12:57:59 +08:00
最后一个竖线“|”,是正则的符号,你要匹配这个字符,需要“\|”,不然就是“或”了
tjmljw
2023-06-01 13:38:01 +08:00
".*END=([^|]+)|" 匹配 ".*END=([^|]+)" 或 空白位置

```
public static void main(String[] args) {
String input = "STARTING=18:00|ENDING=20:00|SLICE_NUMBER=4|";
String regex = "随便写点什么|";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);

int i = 0;
while (matcher.find()) {
i++;
}

System.out.println("match: " + i); // match: 44
}
```

输出 `match: 44`, 因为变量 `input` 中有 `(每个字符前面的空白位置 + 最后一个空白位置) = 44` 个空白位置.
JasonLaw
2023-06-01 14:07:31 +08:00
@jifengg #1
@tjmljw #2
谢谢两位的解答😅

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/944869

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX