【问题标题】:Java regular expression OR operatorJava 正则表达式 OR 运算符
【发布时间】:2011-01-03 03:50:13
【问题描述】:

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

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

例如: 电话|电话|传真

【问题讨论】:

  • 看起来不错,你有什么问题?
  • 是的,应该可以。 cletus、danben 和我自己都同意。还有,@danben - 我的名字是 Dan Beam,哈哈,好亲近!

标签: java regex


【解决方案1】:

您可以单独使用管道:

"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 我必须使用括号吗?
  • 啊,没关系。您的更新修复了它。最后一个例子是我正在寻找的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
  • 2014-08-24
  • 2013-11-18
  • 2023-03-10
  • 1970-01-01
  • 2014-05-01
相关资源
最近更新 更多