2013-02-25 32 views
7

Toán tử "một hoặc nhiều" được sử dụng trong regex cho Java như thế nào? Ví dụ, tôi muốn để phù hợp với điều này:Mẫu khớp Java Regex - Toán tử "Một hoặc nhiều"

((a) (b) (c)) - phù hợp với

((a)) - phù hợp với

nơi a, b, c là bất kỳ ký tự hoặc chữ số

Mô tả cơ bản của biểu thức này là bộ ngoặc trong một tập hợp các dấu ngoặc đơn có chứa tất cả các bộ ngăn cách bởi một khoảng trắng

+0

[Bạn đã thử gì?] (Http://whathaveyoutried.com) –

+0

([(+).] +) <- nhưng điều này không hoạt động – Aneem

+0

Mỗi tập hợp chỉ có một phần tử hay ((a, b, c)) hợp lệ? –

Trả lời

11

Bạn muốn một cái gì đó giống như \((\(\w*\))+\)

Để làm cho nó rõ ràng hơn cách thức hoạt động, mở rộng nó một chút trực quan:

\( # outer bracket 
( # start of group 
\( # inner bracket 
\w* # 0 or more word characters ([0-9a-zA-Z_]) 
\) # inner bracket 
)  # end of group 
+  # and we do that group 1 or more times 
\) # outer bracket 

Giải thích: Nếu bạn áp dụng * hoặc + hoặc? với một cái gì đó đã được chỉ trong (unescaped) dấu ngoặc, sau đó nó được áp dụng cho toàn bộ nội dung của dấu ngoặc vuông thay vì chỉ một yếu tố.

Bất cứ khi nào tôi có một câu hỏi regex Tôi nhìn nó trong http://www.regular-expressions.info/reference.html

+0

@Supericy Nếu có dấu cách giữa dấu ngoặc, hãy thêm dấu cách vào regex quá (hoặc '\ s *' nếu bạn muốn chung chung về khoảng trắng) – Patashu

+1

@Một trong Java bạn cần sử dụng hai dấu chéo ngược \\ để chuyển nó tới công cụ regex dưới dạng một dấu chéo ngược \ vì nó cũng là ký tự đặc biệt trong Chuỗi. – Pshemo

+1

@Aneem: Java sử dụng dấu gạch chéo ngược để thoát các ký tự đặc biệt như '\ t' và' \ n' trong chuỗi của nó - có nghĩa là dấu gạch chéo ngược biến mất khi trình phân tích cú pháp biểu thức chính quy nhìn thấy chúng. Để tránh điều này, bạn phải nhân đôi số dấu gạch chéo ngược. – Patashu

Các vấn đề liên quan