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

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

  •  
  •   JasonLaw · 329 天前 · 697 次点击
    这是一个创建于 329 天前的主题,其中的信息可能已经有所发展或是发生改变。

    为什么 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  
       329 天前   ❤️ 1
    最后一个竖线“|”,是正则的符号,你要匹配这个字符,需要“\|”,不然就是“或”了
    tjmljw
        2
    tjmljw  
       329 天前   ❤️ 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
       329 天前 via iPhone
    @jifengg #1
    @tjmljw #2
    谢谢两位的解答😅
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3152 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:46 · PVG 22:46 · LAX 07:46 · JFK 10:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.