有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java正则表达式匹配空白、任意字符和/或给定序列的换行符

我有三种不同的可能场景与下面解释的正则表达式相匹配

首先,我需要匹配的文件输入:

--1--(介于和之间的任何内容:

 On whatever:

--2--(在相邻的:)

 On:

--3--(On和之间的任何字符:)

 On=:

--4--(O和:之间的an=和/n)

 On=
 :

这是我想要匹配的正则表达式,但运气不好

// String text = <file contents from above>
Pattern PATTERN = Pattern.compile("^(On\\s(.+):)$", Pattern.MULTILINE | Pattern.DOITALL);
Matcher m = PATTERN.matcher(text);
if (m.find()) {
   System.out.println("Not sure if this is correct to get all 4cases to step in here???");
}

谢谢


共 (4) 个答案

  1. # 1 楼答案

    下一个呢?它更简单

    On([^:]*):
    

    例如:

    private static final Pattern REGEX_PATTERN = 
            Pattern.compile("On([^:]*):");
    
    public static void main(String[] args) {
        String input = "On=\n:";
    
        System.out.println(
            REGEX_PATTERN.matcher(input).matches()
        );  // prints "true"
    
        Matcher matcher = REGEX_PATTERN.matcher(input);
        while (matcher.find()) {
            System.out.println(matcher.group(1));
        }
    
    }
    

    输出:

    "=\n"
    
  2. # 2 楼答案

    通过^(On\\s(.+):)$你是说:“从行的开始,我想匹配'On'后跟一个空格,后跟至少一个任何类型的字符,后跟冒号,然后是行的结尾”

    使用这个regexp,您将匹配第一个案例"(.+)" ==> 'whatever';但是,第二种情况将不匹配(表达式将失败,因为它期望在“On”之后有一个空格,然后在冒号之前至少有另一个字符;第三种情况也不匹配,因为它缺少一个空格;最后,第四种情况将匹配正常

    因此,正如托尼回答的那样,^On.*:$会起作用。但是,我猜你是在尝试将“On”部分后面的内容分组,所以我猜你可以使用^(On\\s*(\\S*)\\s*:)$,这与说“match'On'后跟任意序列的空格,后跟由任意序列的非空格字符组成的标记,后跟另一序列的空格,然后是冒号相同。这也会给您两个组:第一个组将包含“Onwhere:“第二个将仅包含任何部分

  3. # 3 楼答案

    我可能误解了,但我很确定你想得太多了。所有这些场景基本上都可以简化为:On和:,包括换行符或空字符串。因此,从我所知道的来看,On.*:应该可以做到这一点

  4. # 4 楼答案

    我想你在找这样的东西

    Pattern PATTERN = Pattern.compile("^(?:On:|On\s?([^:]*):)$", Pattern.MULTILINE);
    

    或许

    Pattern PATTERN = Pattern.compile("^(?:On:|On\s?([\S\s]*?):)$", Pattern.MULTILINE);