如何在Java正则表达式中使用OR?我尝试了以下操作,但它返回null
而不是文本。
Pattern reg = Pattern.compile("\\*+|#+ (.+?)");
Matcher matcher = reg.matcher("* kdkdk"); \\ "# aksdasd"
matcher.find();
System.out.println(matcher.group(1));
答案 0 :(得分:3)
搜索X
或Y
的正则表达式语法为(X|Y)
。如果模式中还有其他任何内容,则必须使用括号。您正在搜索其中一种模式:
文字
*
重复一次或多次
OR
文字
#
重复一次或多次,后跟一个空格,后跟一个或多个任意字符,匹配最少次数
此模式使用OR的第一部分匹配*
,但由于该子模式未定义捕获组,因此matcher.group(1)
将为null。如果您打印matcher.group(0)
,则会得到*
作为输出。
如果你想捕获一行中空格右边的第一个字符,该行以“*”或“#”开头重复几次,后跟一个空格和至少一个字符,你可能想要:
Pattern.compile("(?:\\*+|#+) (.+?)");
如果您希望所有内容都在空间的右侧,您需要:
Pattern.compile("(?:\\*+|#+) (.+)");