我需要缩短表达式\D*(\d+)( days? | hours? | minutes? | seconds? )(ago|from now).*
它匹配一种格式,代表时间,i .E。:" 3小时前","从现在起5天"," 1分钟前"。它在html-Code中逐行搜索这些术语。
我需要的编程语言是Java,所以我必须将整个字符串与reg匹配。表达
答案 0 :(得分:2)
你不会明显缩短这个正则表达式 - 它的大部分长度都是文字文本。这可能是你能得到的最短的:
(\d+) (day|hour|minute|second)(s?) (ago|from now)
虽然提取s?
并从中添加一个额外的组会降低可读性 - IMO。 (并且确实需要围绕s?
的小组,如果,您希望能够区分minute
和minutes
)。
就个人而言,我发现你的原始正则表达式确定并且不关心microoptimizations。我只会将空间移出群组,即:
(\d+) (days?|hours?|minutes?|seconds?) (ago|from now)
关于String.matches()
- 您可以使用Matcher.find()
方法进行部分匹配。