0

This is my String:

 Kết quả xổ số đài  Bình Phước ngày 05/01/2013 Tên Giải Bình Phước - Ký hiệu: bp-05-01 Giải tám 08 Giải bảy 028 Giải sáu 3137-1907-5049 Giải năm 2026 Giải tư 25982-96941-33495-24133-42882-60030-16818 Giải ba 15685-66788 Giải nhì 20283 Giải nhất 46475 Giải đặc biệt 207984 

This is my pattern:

.*?(Giải tám([\\s\\d-]*?))?Giải bảy([\\s\\d-]*?)Giải sáu([\\s\\d-]*?)Giải năm([\\s\\d-]*?)Giải tư([\\s\\d-]*?)Giải ba([\\s\\d-]*?)Giải nhì([\\s\\d-]*?)Giải nhất([\\s\\d-]*?)Giải đặc biệt([\\s\\d]*?).*? 

I try to get the 10 groups of numbers from the string. But I can't get the last group. It's always null. I also tested this http://www.regexplanet.com/advanced/java/index.html and I got the same result, without last group.

Please tell me where my pattern wrong at.

UPDATE: the output has 10 group as below:

01-20 01:32:23.013: I/System.out(11368): group 0 : Kết quả xổ số đài  Bình Phước ngày 05/01/2013 Tên Giải Bình Phước - Ký hiệu: bp-05-01 Giải tám 08 Giải bảy 028 Giải sáu 3137-1907-5049 Giải năm 2026 Giải tư 25982-96941-33495-24133-42882-60030-16818 Giải ba 15685-66788 Giải nhì 20283 Giải nhất 46475 Giải đặc biệt 207984 01-20 01:32:23.013: I/System.out(11368): group 1 : Giải tám 08 01-20 01:32:23.014: I/System.out(11368): group 2 : 08 01-20 01:32:23.014: I/System.out(11368): group 3 : 028 01-20 01:32:23.015: I/System.out(11368): group 4 : 3137-1907-5049 01-20 01:32:23.015: I/System.out(11368): group 5 : 2026 01-20 01:32:23.015: I/System.out(11368): group 6 : 25982-96941-33495-24133-42882-60030-16818 01-20 01:32:23.015: I/System.out(11368): group 7 : 15685-66788 01-20 01:32:23.016: I/System.out(11368): group 8 : 20283 01-20 01:32:23.016: I/System.out(11368): group 9 : 46475 01-20 01:32:23.017: I/System.out(11368): group 10 : 

Thanks.

4
  • 1
    I see 11 groups of numbers in your input string. Can you post the output you are trying to get from that input? Commented Jan 19, 2013 at 18:29
  • Please see my update. The matcher.groupCount() return 10, so I know that there are 10 groups found. You could copy the string and the pattern to test at regexplanet.com/advanced/java/index.html Commented Jan 19, 2013 at 18:34
  • groupCount() returns the number of groups in your regex, not the the number of groups matched in your input, see JavaDoc Commented Jan 19, 2013 at 18:41
  • Thank to Reimeus answer, I remove the last ? at my last matching group and It works. But I don't understand why. Could you tell me why please? Commented Jan 19, 2013 at 18:44

1 Answer 1

1

Remove the ? quantifer in your last matching group. Every wildcard expression is reluctant so will not consume all characters in the string. Having at least one greedy expression ensures that the last group can be matched.

.*?(Giải tám([\\s\\d-]*?))?Giải bảy([\\s\\d-]*?)Giải sáu([\\s\\d-]*?)Giải năm([\\s\\d-]*?)Giải tư([\\s\\d-]*?)Giải ba([\\s\\d-]*?)Giải nhì([\\s\\d-]*?)Giải nhất([\\s\\d-]*?)Giải đặc biệt([\\s\\d]*).*? 
Sign up to request clarification or add additional context in comments.

3 Comments

I remove the ? at the last matching group and It works. But I don't understand why. Could you please give me some explanation?
Thanks Reimeus. Some time the pattern does not work. For example, this string return null when I call pattern.matcher(): Kết quả xổ số đài  Đà Nẵng ngày 16/01/2013 Tên Giải Đà Nẵng - Ký hiệu: 16/01/2013 Giải tám 72 Giải bảy 539 Giải sáu 2539-0547-6344 Giải năm 7683 Giải tư 23848-57813-08826-84383-24408-72615-01193 Giải ba 08351-33404 Giải nhì 67609 Giải nhất 54217 Đặc biệt 281753. I also test this with the online regex-test-tool (regexplanet.com/advanced/java/index.html). the tool return NO for matches() and find(). Help me please.
That string has Đặc biệt before the last matching group which is different from the string in the question, so the pattern won't match it.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.