我有三种不同的可能方案来匹配下面解释的正则表达式。
首先我需要匹配的文件输入:
- 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!
答案 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"