Regex groovy正则表达式修饰符。。。添加评论

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]+?)?/) { ..

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]+?)?/) {
  ...
}
在中,您可以添加
/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!这是金子!附加的修改器记录在这里。