java - 为什么这个正则表达式在 FreeMarker 中失败

标签 java regex freemarker smooks

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

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

我在 Java 中尝试了相同的正则表达式,它工作得很好。

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

异常(exception):

org.milyn.cdr.SmooksConfigurationException: 

Error invoking @Initialize method 'initialize' on class 'org.milyn.templating.freemarker.FreeMarkerTemplateProcessor'.`

org.milyn.cdr.SmooksConfigurationException:

Error loading Templating resource: Target Profile: [[org.milyn.profile.Profile#default_profile]], Selector:`

最佳答案

它失败,因为 \. 不是字符串文字中的有效转义。 (出于同样的原因,在 Java 中编译也会失败。)您要么必须编写 \\. (就像在 Java 中一样),或者更好的是,以 r 开头字符串文字 并保持 \. 不变(r 表示原始字符串文字,它不会特殊对待 \): r"[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?"

顺便说一句,如果这确实是 Smooks 显示的全部内容,那么它并没有多大帮助。解析异常应该在某处...但如果没有,您可以使用 https://try.freemarker.apache.org/尝试您的模板片段。

关于java - 为什么这个正则表达式在 FreeMarker 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55920992/

相关文章:

Java持久化API : Glassfish tries to use derby instead of MySQL?

java - 尽管 saveOrUpdate 失败,但版本已增加

java - 设备离线时如何获得正确的Android设备当前日期和时间

python - 正则表达式匹配另一个特定术语之前或之后的术语

Python 用户输入作为正则表达式,如何正确执行?

java - FreeMarker编码困惑

java - freemarker 2.3.21 和 freemarker 2.3.26-incubating 有什么区别

java - 更改Groovy使用的JVM版本在Drone.io中构建

python - 尝试在Python中以特殊格式在字符串中查找带有通配符整数的文本

java - 无法使用Freemarker打印2层ArrayList的数据