Ekspresi reguler Java OR operator

89

Ini mungkin pertanyaan yang bodoh, tetapi saya tidak dapat menemukannya di mana pun:

Bagaimana cara menggunakan java OR operator ekspresi reguler (|) tanpa tanda kurung?

misalnya: Tel | Telepon | Faks

Eric Conner
sumber
Oke, masalah apa yang Anda alami?
danben
1
ya, harus bekerja. cletus, danben, dan saya setuju. juga, @danben - nama saya Dan Beam, lol, sangat dekat!
Dan Beam

Jawaban:

156

Anda bisa menggunakan pipa itu sendiri:

"string1|string2"

sebagai contoh:

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

Keluaran:

blah, blah, string3

Alasan utama menggunakan tanda kurung adalah untuk membatasi ruang lingkup alternatif:

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

memiliki keluaran yang sama. tetapi jika Anda hanya melakukan ini:

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

Anda mendapatkan:

blah, stringblah, string3

karena Anda telah mengatakan "string1" atau "2".

Jika Anda tidak ingin menangkap bagian ekspresi tersebut, gunakan ?::

String s = "string1, string2, string3";
System.out.println(s.replaceAll("string(?:1|2)", "blah"));
cletus
sumber
Bagaimana jika saya perlu membatasi string ini dari bagian regex lain yang juga merupakan string? mis. eee (ff | gg) eee Apakah saya harus menggunakan tanda kurung?
Eric Conner
Ah tidak apa-apa. Pembaruan Anda memperbaikinya. Contoh terakhir adalah apa yang saya cari. Terima kasih!
Eric Conner