正则表达式 - 我可以缩短这个表达式吗?

时间:2015-02-01 20:29:56

标签: java regex

我需要缩短表达式\D*(\d+)( days? | hours? | minutes? | seconds? )(ago|from now).* 它匹配一种格式,代表时间,i .E。:" 3小时前","从现在起5天"," 1分钟前"。它在html-Code中逐行搜索这些术语。

我需要的编程语言是Java,所以我必须将整个字符串与reg匹配。表达

1 个答案:

答案 0 :(得分:2)

你不会明显缩短这个正则表达式 - 它的大部分长度都是文字文本。这可能是你能得到的最短的:

(\d+) (day|hour|minute|second)(s?) (ago|from now)

虽然提取s?并从中添加一个额外的组会降低可读性 - IMO。 (并且确实需要围绕s? 的小组,如果,您希望能够区分minuteminutes)。

就个人而言,我发现你的原始正则表达式确定并且不关心microoptimizations。我只会将空间移出群组,即:

(\d+) (days?|hours?|minutes?|seconds?) (ago|from now)

关于String.matches() - 您可以使用Matcher.find()方法进行部分匹配。