Регулярний вираз Java або оператор


87

Це може бути тупе запитання, але я ніде не міг його знайти:

Як я можу використовувати оператор регулярного виразу java АБО (|) без дужок?

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


Виглядає нормально, яка у вас проблема?
danben

1
так, повинно працювати. cletus, danben і я погоджуюсь. також, @danben - мене звати Ден Бім, ха-ха, так близько!
Dan Beam

Відповіді:


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 Чи потрібно використовувати дужки?
Eric Conner

Ах нічого. Ваше оновлення це виправляє. Останній приклад - це те, що я шукав. Дякую!
Ерік Коннер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.