0

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

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

-- 1 ---(介于 On 和 :

 On whatever:

-- 2 -- (在相邻:)

 On:

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

 On=:

-- 4 -- (O 和 : 之间的 = 和 /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

4 回答 4

1

我可能会误解,但我很确定你想多了。所有这些场景基本上都可以简化为: On 和 : 之间的任何内容,包括换行符或空字符串。所以据我所知,On.*:应该做的伎俩。

于 2013-10-09T02:34:31.040 回答
1

我想你正在寻找这样的东西。

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

或许

Pattern PATTERN = Pattern.compile("^(?:On:|On\s?([\S\s]*?):)$", Pattern.MULTILINE);
于 2013-10-09T03:00:24.073 回答
1

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

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

所以,正如托尼回答^On.*:$的那样,会成功的。但是,我想您正在尝试对“On”部分之后的任何内容进行分组,所以我想您可以使用^(On\\s*(\\S*)\\s*:)$,这与说“匹配 'On' 后跟任何空格序列,然后是任何可以理解的标记相同”非空白字符序列,然后是另一个空格序列,然后是冒号。这也将为您提供两组:第一个将包含“在任何内容上:”;第二个将单独包含任何部分。

于 2013-10-09T03:02:42.917 回答
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"
于 2013-10-09T03:12:03.247 回答