V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
JasonLaw
V2EX  ›  程序员

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

  •  
  •   JasonLaw · Jun 1, 2023 · 1562 views
    This topic created in 1061 days ago, the information mentioned may be changed or developed.

    为什么 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  
       Jun 1, 2023   ❤️ 1
    最后一个竖线“|”,是正则的符号,你要匹配这个字符,需要“\|”,不然就是“或”了
    tjmljw
        2
    tjmljw  
       Jun 1, 2023   ❤️ 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
       Jun 1, 2023 via iPhone
    @jifengg #1
    @tjmljw #2
    谢谢两位的解答😅
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5457 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 1001ms · UTC 09:31 · PVG 17:31 · LAX 02:31 · JFK 05:31
    ♥ Do have faith in what you're doing.