带有可选右括号的java年正则表达式
我正在努力使下面的正则表达式(Java)正常工作。我想看看字符串是否有一年,字符串是否可以是
Mar 3, 2014
或者有时使用右括号,例如
Mar 3, 2014)
我正在使用
text.matches("\\b((19|20)\\d{2})(\\)?)\\b")
这在大多数情况下都有效,但如果字符串以括号结尾,则不匹配 如果我使用
text.matches("\\b((19|20)\\d{2})(\\)?)$")
它匹配以括号结尾的文本,但不匹配具有其他空格的字符串
我原以为\b会包含字符串的结尾,但无法使其工作
我知道我可以用两个正则表达式,但那看起来真的很难看
# 1 楼答案
你的问题不是很清楚,但据我所知,这应该对你有用:
演示:http://regex101.com/r/lO0aH4/3
# 2 楼答案
您的主要问题是
matches
检查整个字符串是否与正则表达式匹配。您想要的是测试字符串是否包含可由正则表达式匹配的子字符串。为此,请使用您还可以用
.*
包围您的正则表达式,让它匹配您想要查找的部分旁边的字符,并像您现在这样使用匹配项但这必须迭代整个字符串
换句话说,您可以尝试使用Pattern/Matcher或类似
matches(".*\\b(19|20)\\d{2}\\b.*")
的方法来查找\\b(19|20)\\d{2}\\b
顺便说一句,括号
)
不包括在\w
类中,因此\b
将接受\w
和)
之间的位置作为单词边界,因此例如"9)"
将匹配regex\d\b\)
# 3 楼答案
您可以尝试以下方法:
我不确定它是否能帮助您,最好给我们一个完整的字符串匹配示例。字符串必须在一年前结束(带可选括号),还是在一年后结束