为什么此Regex在FreeMarker中失败

时间:2019-04-30 12:28:56

标签: java regex freemarker smooks

使用带有Freemarker的Smooks将CSV转换为JSON。在Freemarker中使用匹配项添加正则表达式时,语法将失败并出现以下异常。删除该特定条件后,一切正常。

正则表达式用于检查字符串是否是正确的指数。

我已经在Java中尝试了相同的正则表达式,并且效果很好。

<#elseif message?contains("E+") && message?matches("[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?")>

例外:

org.milyn.cdr.SmooksConfigurationException: 
  

在类'org.milyn.templating.freemarker.FreeMarkerTemplateProcessor'上调用@Initialize方法'initialize'的错误。

org.milyn.cdr.SmooksConfigurationException:

  

加载模板资源时出错:目标配置文件:[[org.milyn.profile.Profile#default_profile]],选择器:

1 个答案:

答案 0 :(得分:1)

失败,因为\.在字符串文字中不是有效的转义符。 (出于同样的原因,在Java中编译也会失败。)或者必须编写\\.(就像在Java中一样),或者更好的是,以r开始字符串文字,并保留{依旧{1}}(对于原始字符串文字,\.,不特别对待r):\

顺便说一句,如果真的是Smooks展示的全部内容,那不是很有帮助。解析异常应该在某个地方……但是,如果没有,则可以使用https://try.freemarker.apache.org/来尝试您的模板片段。