Java正则表达式OR运算符


87

这可能是一个愚蠢的问题,但我在任何地方都找不到:

如何不带括号使用Java OR正则表达式运算符(|)?

例如:电话|电话|传真


看起来还不错,您遇到什么问题?
danben 2010年

1
是的,应该工作。cletus,danben和我本人都同意。还有@danben-我叫Dan Beam,哈哈,好亲近!
Dan Beam 2010年

Answers:


154

您可以单独使用管道:

"string1|string2"

例如:

String s = "string1, string2, string3";
System.out.println(s.replaceAll("string1|string2", "blah"));

输出:

blah, blah, string3

使用括号的主要原因是要限制替代方法的范围:

String s = "string1, string2, string3";
System.out.println(s.replaceAll("string(1|2)", "blah"));

具有相同的输出。但如果您只是这样做:

String s = "string1, string2, string3";
System.out.println(s.replaceAll("string1|2", "blah"));

你得到:

blah, stringblah, string3

因为您说过“ string1”或“ 2”。

如果您不想捕获表达式的那一部分,请使用?:

String s = "string1, string2, string3";
System.out.println(s.replaceAll("string(?:1|2)", "blah"));

如果我需要将这些字符串与其他也是字符串的正则表达式分隔开,该怎么办?例如eee(ff | gg)eee我必须使用括号吗?
埃里克·康纳

啊没关系。您的更新已解决。最后一个例子是我想要的。谢谢!
埃里克·康纳
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.