java - String.matches() 意外返回 false。

标签 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:.]+[ ]+"

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

" 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 "

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

" 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 个字符串通过了正则表达式测试。

最佳答案

[ ]*[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

而失败

关于java - String.matches() 意外返回 false。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26351815/

相关文章:

java - Liferay 6.2自定义连接同名列重叠

Java actionlistener 变量是从内部类中访问的

java - 用于基于正则表达式的 XML 解析的分隔符?

Android比较格式化和未格式化的电话号码

比较宏定义中的字符串

java - Android - java - 计算字数

java - 我如何调整该程序以符合在线法官的要求?

java - Guice辅助注入(inject)

python - 使用括号的正则表达式模式 '[]'

java - 使用正则表达式提取数据