Toán tử OR biểu thức chính quy trong Java


87

Đây có thể là một câu hỏi ngớ ngẩn, nhưng tôi không thể tìm thấy nó ở đâu:

Làm cách nào để sử dụng toán tử biểu thức chính quy HOẶC java (|) không có dấu ngoặc đơn?

ví dụ: Tel | Phone | Fax


Có vẻ ổn, bạn đang gặp vấn đề gì vậy?
danben

1
vâng, nên làm việc. cletus, danben, và tôi đồng ý. nữa, @danben - tên tôi là Dan Beam, lol, rất gần!
Dan Beam

Câu trả lời:


154

Bạn chỉ có thể sử dụng đường ống của riêng nó:

"string1|string2"

ví dụ:

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

Đầu ra:

blah, blah, string3

Lý do chính để sử dụng dấu ngoặc đơn là để giới hạn phạm vi của các lựa chọn thay thế:

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

có cùng sản lượng. nhưng nếu bạn chỉ làm điều này:

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

bạn lấy:

blah, stringblah, string3

vì bạn đã nói "string1" hoặc "2".

Nếu bạn không muốn nắm bắt phần đó của biểu thức, hãy sử dụng ?::

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

Điều gì sẽ xảy ra nếu tôi cần phân tách các chuỗi này khỏi các phần khác của regex cũng là chuỗi? ví dụ: eee (ff | gg) eee Tôi có phải sử dụng dấu ngoặc đơn không?
Eric Conner

À, đừng bận tâm. Bản cập nhật của bạn sửa nó. Ví dụ cuối cùng là những gì tôi đang tìm kiếm. Cảm ơn!
Eric Conner
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.