Регулярное выражение Java Оператор ИЛИ

87

Это может быть глупый вопрос, но я нигде его не нашел:

Как я могу использовать оператор регулярного выражения OR (|) в Java без скобок?

например: Тел | Телефон | Факс

Эрик Коннер
источник
Выглядит нормально, какая у вас проблема?
danben 09
1
да, должно работать. Клетус, Данбен и я согласны. также, @danben - меня зовут Дэн Бим, лол, так близко!
Дэн Бим

Ответы:

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

потому что вы сказали "строка1" или "2".

Если вы не хотите фиксировать эту часть выражения, используйте ?::

String s = "string1, string2, string3";
System.out.println(s.replaceAll("string(?:1|2)", "blah"));
Cletus
источник
Что, если мне нужно отделить эти строки от других частей регулярного выражения, которые также являются строками? например, eee (ff | gg) eee Нужно ли использовать скобки?
Эрик Коннер
Да ладно. Ваше обновление исправляет это. Последний пример - это то, что я искал. Благодарность!
Эрик Коннер