Regex groovy正则表达式修饰符。。。添加评论
groovy中有没有办法忽略正则表达式中的空格并添加注释?这对于复杂的正则表达式非常有用 例如。。。我有一个DateTime实用程序类,它解析DateTime字符串的各种变体。给定一个与日期时间匹配的正则表达式Regex groovy正则表达式修饰符。。。添加评论,regex,groovy,Regex,Groovy,groovy中有没有办法忽略正则表达式中的空格并添加注释?这对于复杂的正则表达式非常有用 例如。。。我有一个DateTime实用程序类,它解析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]+?)?/) { ..
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]+?)?/) {
...
}
在中,您可以添加/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中是否存在类似的东西?我也愿意接受关于如何使这篇文章更容易阅读的建议。:) 多亏了@gtagaxiola,我才能够阅读关于如何做到这一点的文章 我修改了我的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
/) {
...
}
if(date=~/(?x)#允许空白和逗号修饰符
({1,4})年或月
([-\/\\])分隔器
\月或日
分频器
\年或日
(([T\s])#时间开始:D
\一小时
(\:\d\d)?+\分钟
(\:\d\d)秒
)?+#可选时间结束
(\s?[+-][0-9\:]+?#时区偏移量“-0700”
|\s?[0-9a-zA-Z\/\uS]+?#时区名称'MST''AmericaDenver'
)?#结束可选时区
/) {
...
}
另一种方法是注意,在Groovy中,/blah/
完全等同于'blah'
或“blah”
——它只不过是字符串文本的另一种语法(但它允许您在大多数地方使用反斜杠,而不必转义它们)。因此,您可以拆分模式字符串并使用Java风格的注释:
if(date =~ (
/(\d{1,4})/ // year OR month
+ /([-\/\\])/ // divider
+ /\d{1,2}/ // month OR day
+ /[-\/\\]/ // divider
// etc. etc.
)) {
(?x)这是文档,谢谢@gtgaxiola!这是金子!附加的修改器记录在这里。