0

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

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

1 回答 1

3

用于搜索Xor的正则表达式语法Y(X|Y)。如果模式中还有其他内容,则需要括号。您正在搜索以下模式之一:

文字*重复一次或多次

或者

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

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

如果要捕获以“*”或“#”开头的行中空格右侧的第一个字符重复了一些次,然后是空格和至少一个字符,您可能需要:

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

如果您想要空间右侧的所有内容,您想要:

Pattern.compile("(?:\\*+|#+) (.+)");
于 2013-09-08T02:53:24.637 回答