在groovy中有没有办法忽略正则表达式中的空格并添加注释?这对于复杂的正则表达式非常有用。
示例...我有一个DateTime实用程序类,用于解析日期时间字符串的各种变体。给定一个匹配日期时间的正则表达式...
if(dateString =~ /(\d{1,4})([-\/\\])\d{1,2}[-\/\\]\d{1,4}(([T\s])\d{1,2}(\:\d\d)?+(\:\d\d)?)?+(\s?[+-][0-9\:]+?|\s?[0-9a-zA-Z\/_\s]+?)?/) {
...
}
在perl中,您可以添加/x
修饰符以拆分正则表达式并添加注释
if($date_string =~ m/
(\d{1,4}) #month OR year
([-\/\\]) #divider
\d{1,2} #day OR month
[-\/\\] #divider
\d{1,4} #day OR year regex supports 01/31/2014 OR 2014-01-31
(([T\s]) # beginning of TIME :)
\d{1,2} # hour
(\:\d\d)?+ # minute
(\:\d\d)? # second
)?+ # end of optional TIME
(\s?[+-][0-9\:]+? # numbered timezone '-0700'
|\s?[0-9a-zA-Z\/_\s]+? #named timezone 'MST' 'America/Denver'
)? # end optional Timezone
/x) {
...
}
在groovy中存在这样的事情吗?我也对如何使这更容易阅读的建议持开放态度。 :)
答案 0 :(得分:1)
感谢@gtagaxiola,我能够阅读有关如何执行此操作的documentation。
我修改了我的groovy代码并运行了所有的DateTime测试,这个正则表达式适用于评论......
if(date =~ /(?x) # whitespaces & commments allowed modifier
(\d{1,4}) # year OR month
([-\/\\]) # divider
\d{1,2} # month OR day
[-\/\\] # divider
\d{1,4} # year OR day
(([T\s]) # beginning of TIME :D
\d{1,2} # hour
(\:\d\d)?+ # minute
(\:\d\d)? # second
)?+ # end of optional Time
(\s?[+-][0-9\:]+? # timezone offset '-0700'
|\s?[0-9a-zA-Z\/_\s]+? # timezone name 'MST' 'America<whack>Denver'
)? # End optional timezone
/) {
...
}
答案 1 :(得分:1)
另一种方法是注意,在Groovy中/blah/
完全等同于'blah'
或"blah"
- 它只不过是字符串文字的替代语法(但允许您使用在大多数地方使用反斜杠而不必逃避它们)。因此,您可以拆分模式字符串并使用Java样式的注释:
if(date =~ (
/(\d{1,4})/ // year OR month
+ /([-\/\\])/ // divider
+ /\d{1,2}/ // month OR day
+ /[-\/\\]/ // divider
// etc. etc.
)) {