groovy正则表达式修饰符...添加注释

时间:2014-01-06 18:20:26

标签: regex groovy

在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中存在这样的事情吗?我也对如何使这更容易阅读的建议持开放态度。 :)

2 个答案:

答案 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.
)) {