使用带有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]],选择器:
答案 0 :(得分:1)
失败,因为\.
在字符串文字中不是有效的转义符。 (出于同样的原因,在Java中编译也会失败。)或者必须编写\\.
(就像在Java中一样),或者更好的是,以r
开始字符串文字,并保留{依旧{1}}(对于原始字符串文字,\.
,不特别对待r
):\
顺便说一句,如果真的是Smooks展示的全部内容,那不是很有帮助。解析异常应该在某个地方……但是,如果没有,则可以使用https://try.freemarker.apache.org/来尝试您的模板片段。