如何在Freemarker中使用正则表达式(\b,\w)?

6
${str?replace("\d+", "", "r")};

我想使用\d来删除数字,但它没有生效!!!
但是${str?replace("[0-9]", "", "r")};有效!!!
因此,我想知道如何使用像\d\b\w等正则表达式?

似乎freemaker是一个基于Java的模板引擎。那么为什么不尝试使用\\d+呢? - HamZa
它不仅会默默地“不起作用”,还会给你一个解析错误的消息...我的意思是,下次如果有什么失败了,请包括错误消息。 - ddekany
@ddekany 是的,你说得对,在使用\d时会出现错误信息。 - Nonesome
1个回答

12

你需要将反斜杠加倍:

${str?replace("\\d+", "", "r")};
这是因为在应用正则表达式转义规则之前,会先应用字符串转义规则。所以字符串 "\\d" 会被转换为正则表达式 \d,然后匹配一个数字。
如果你的字符串是 "\d",字符串处理器将它翻译为字面量 d(因为 \d 不是被认可的字符串转义序列,所以它被忽略)。

1
顺便提一下,FreeMarker不会将\d翻译成d;相反,它会显示一个解析错误信息。 - ddekany
3
"\\d+" 可以写为 r"\d+",其中的 r 代表“原始”而非正则表达式。在原始字符串中反斜杠不是特殊字符,这使得它们对于正则表达式来说非常实用。 - ddekany
如果Freemarker文档真正记录了这个,那就太好了!谢谢! - MaxRocket

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接