2013-07-29 31 views
5

Vấn đề:Java: biểu hiện thường xuyên trong đó mỗi nhân vật xuất hiện 0-1 lần

  1. từ trận đấu trong đó mỗi char của biểu thức chính quy xảy ra một lần tại nhất.

  2. Từ phải có một kích thước nhất định, chúng ta hãy nói "{2,5}"

  3. Một char cụ thể phải nằm trong văn bản, chúng ta hãy nói char "e"

những gì tôi đã có:

word.matches("^[abcde]{2,5}$"); 

này phù hợp với tất cả các từ nơi các ký tự a, b, c, d và e xảy ra 0..5 lần. Do đó các từ "abba" và "dead" được xuất hiện mặc dù "abba" sử dụng char "b" hai lần và "dead" sử dụng char "d" hai lần. Biểu thức cũng bỏ qua nếu char "e" có trong từ.

Điều tôi muốn là đối sánh nơi mỗi ký tự được sử dụng một lần tối đa, từ dài 2-5 chữ cái và chữ "e" có trong từ. Một trận đấu hợp pháp sau đó sẽ là "hạt" ví dụ vì mỗi char được sử dụng một lần tối đa và char "e" là trong từ.

+1

Đó sẽ là một biểu thức chính quy phức tạp. Tôi muốn đề nghị không sử dụng regex cho điều đó cả. Regex không có khả năng "kết hợp này một lần bất cứ nơi nào trong chuỗi". –

Trả lời

11

Bạn có thể sử dụng các biểu như:

^(?=[abcd]*e)(?:([abcde])(?![abcde]*?\1)){2,5}$ 

Một số nhận xét:

^ 
(?=[abcd]*e)  # make sure there is an "e" 
(?: 
    ([abcde])  # match a character and capture it 
    (?!   # make sure it's not repeated 
    [abcde]*? 
    \1   # reference to the previously matched char 
) 
){2,5} 
$ 
+0

Dường như làm việc, tôi nghĩ nó sẽ phức tạp hơn nhiều. Câu trả lời hay nhất +1. –

+1

+1 Nice regex. :) –

+1

@RohitJain, '# comments' là các nhận xét hợp lệ trong chuỗi regex khi sử dụng' (? X) 'hoặc cờ tương đương. Vì vậy, hãy để những người đó. [Documents] (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html#COMMENTS). – Qtax

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