V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
JasonLaw
V2EX  ›  程序员

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

  •  
  •   JasonLaw · 2023-06-01 12:02:47 +08:00 · 882 次点击
    这是一个创建于 538 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为什么 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
        }
    }
    
    jifengg
        1
    jifengg  
       2023-06-01 12:57:59 +08:00   ❤️ 1
    最后一个竖线“|”,是正则的符号,你要匹配这个字符,需要“\|”,不然就是“或”了
    tjmljw
        2
    tjmljw  
       2023-06-01 13:38:01 +08:00   ❤️ 1
    ".*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
        3
    JasonLaw  
    OP
       2023-06-01 14:07:31 +08:00 via iPhone
    @jifengg #1
    @tjmljw #2
    谢谢两位的解答😅
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3870 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:27 · PVG 18:27 · LAX 02:27 · JFK 05:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.