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

时间:2013-10-09 02:26:39

标签: java regex

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

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

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

 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???");
}

THX!

4 个答案:

答案 0 :(得分:1)

我可能会误解,但我很确定你是在思考这个问题。所有这些场景基本上可以简化为:On和:之间的任何内容,包括换行符或空字符串。所以从我所知道的,On.*:应该可以解决问题。

答案 1 :(得分:1)

我认为你正在寻找类似的东西。

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

或者

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

答案 2 :(得分:1)

^(On\\s(.+):)$说:“从行的开头,我想匹配'开启',然后匹配正好一个空格,接着是至少任意一种字符,后跟冒号,然后是行的结尾“。

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

所以,正如托尼回答的那样,^On.*:$会做到这一点。但是,我猜你试图对“On”部分之后的任何内容进行分组,所以我猜你可以使用^(On\\s*(\\S*)\\s*:)$,这与说“匹配'On'后跟任何空格序列,后跟一个令牌,由任何非空格字符序列理解,然后是另一个空格序列,然后是冒号。这也会给你两个组:第一个将包含“On any :”;第二个将包含无论部分。

答案 3 :(得分:1)

下一个怎么样?这更简单。

On([^:]*):

e.g;

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"