在正则表达式中使用OR运算符

时间:2013-09-08 02:50:56

标签: java regex

如何在Java正则表达式中使用OR?我尝试了以下操作,但它返回null而不是文本。

Pattern reg = Pattern.compile("\\*+|#+ (.+?)");
Matcher matcher = reg.matcher("* kdkdk"); \\ "# aksdasd"
matcher.find();
System.out.println(matcher.group(1));

1 个答案:

答案 0 :(得分:3)

搜索XY的正则表达式语法为(X|Y)。如果模式中还有其他任何内容,则必须使用括号。您正在搜索其中一种模式:

  

文字*重复一次或多次

OR

  

文字#重复一次或多次,后跟一个空格,后跟一个或多个任意字符,匹配最少次数

此模式使用OR的第一部分匹配*,但由于该子模式未定义捕获组,因此matcher.group(1)将为null。如果您打印matcher.group(0),则会得到*作为输出。

如果你想捕获一行中空格右边的第一个字符,该行以“*”或“#”开头重复几次,后跟一个空格和至少一个字符,你可能想要:

Pattern.compile("(?:\\*+|#+) (.+?)");

如果您希望所有内容都在空间的右侧,您需要:

Pattern.compile("(?:\\*+|#+) (.+)");