不贪婪的正则表达式不起作用

时间:2016-07-29 17:43:26

标签: java regex

My Regex:

\@((TIME|NOW|TODAY)\(.*?\)\s+[0-2]?[0-9]:[0-5][0-9]:[0-5][0-9])

我的字符串:

@Time blah blah @TIME(1d) blah @NOW(12312) 12:32:25 blah @TODAY(12312) 12:32:25

我期望匹配:

@NOW(12312) 12:32:25

1 个答案:

答案 0 :(得分:1)

使用否定的字符类而不是.*

@((TIME|NOW|TODAY)\([^@]*?\)\s+[0-2]?[0-9]:[0-5][0-9]:[0-5][0-9])

RegEx Demo

[^@]*将匹配任何不是@的字符中的0个或更多字符,因此不匹配以@开头的任何其他字符串。

如果您的匹配字符串中可能有@,那么您可以使用基于负前瞻的正则表达式:

@((?:TIME|NOW|TODAY)\((?:(?!@(?:TIME|NOW|TODAY)).)*\)\s+[0-2]?[0-9]:[0-5][0-9]:[0-5][0-9])

RegEx Demo2