String.matches()意外返回false。

时间:2014-10-14 02:39:53

标签: java regex string

我试图编写一个解释比赛结果的程序。但是为了做到这一点,我需要使用正则表达式来测试字符串是否使用String.matches(String regex)方法匹配某个模式。 使用此方法时,我希望返回true的某些字符串,而是返回false

使用以下字符串作为正则表达式模式,当应该返回true时,某些字符串会返回false和其他true

regex = "[ ]*[1-9]+[ ]+[a-zA-Z]+[ ]+[a-zA-Z]+[ ]+[a-zA-Z]+[ ]?[a-zA-Z]*[ ]?[a-zA-Z]*[ ]?[a-zA-Z]*[ ]?[a-zA-Z]*[ ]?[a-zA-Z]*[ ]?[1-9]+[ ]+[1-9]+[ ]+[0-9:.]+[ ]+"

这些是使用true方法返回string.matches(String regex)的一些字符串:

" 1 Ryan Kepshire Crown Point 31 4 16:31 "
" 2 Matthew Mosak Crown Point 34 4 16:44 "
" 3 Dylan Wallace Crown Point 36 4 16:58 "
" 4 Nicholas Zak Hanover Central 51 6 17:08 "
" 5 Joshua Whitaker Crown Point 37 4 17:16 "
" 8 Collin Allen Hobart 64 8 17:23 "
" 9 Zachary Hoover Crown Point 29 4 17:29 "

这些是使用false方法返回string.matches(String regex)的一些字符串:

" 6 Christopher Ramos River Forest 103 12 17:18 "
" 7 Boyer Hunter Lowell 78 10 17:20 "
" 10 Miguel Tapia Merrillville 98 11 17:32 "

我需要帮助确定为什么底部的三个字符串未通过正则表达式测试而前7个字符串通过它。

1 个答案:

答案 0 :(得分:5)

[ ]*[0-9]+[ ]+[a-zA-Z]+[ ]+[a-zA-Z]+[ ]+[a-zA-Z]+[ ]?[a-zA-Z]*[ ]?[a-zA-Z]*[ ]?[a-zA-Z]*[ 
     ^ 
]?[a-zA-Z]*[ ]?[a-zA-Z]*[ ]?[0-9]+[ ]+[0-9]+[ ]+[0-9:.]+[ ]+
                             ^         ^    

你的正则表达式不允许0整数。这就是它失败的原因。见这里。

http://regex101.com/r/uH3tP3/5

我修改了它以接受0

实施例。 [1-9]+将不接受10

" 6 Christopher Ramos River Forest 103 12 17:18" //由于103

而失败

" 7 Boyer Hunter Lowell 78 10 17:20" //由于10

而失败

" 10 Miguel Tapia Merrillville 98 11 17:32 //由于10而失败