Freemarker:选择字符串中最后一个字符实例

时间:2014-02-18 23:07:55

标签: java regex freemarker

所以我有一个字符串,类似于“first-second-third-100201”。我想选择最后一个 - 并用/.

替换它

如果我想替换第一个实例,我可以做类似

的事情
<#assign string = "first-second-third-100201 />
${string?replace("-","/","f"}

首先传递“f”作为第三个参数。但是,Freemarker似乎没有类似的“最后”内置,以便选择短划线的最后一个实例。

有没有人有使用正则表达式模拟这个内置的经验,或者知道如何这样做?谢谢!

编辑:

所以这很难看,但技术上很有效。

<#assign first = "first-second-third-100201" >
<#assign last = first?last_index_of('-')>
<#assign last_replace = first?substring(0, last + 1) />
<#assign permalink_beg = first?substring(0, last) />
<#assign permalink_end = first?replace(last_replace, '/') >
${permalink_beg}${permalink_end}

评估为第一至第三/ 100201

其他人有更简单/更优雅的解决方案吗?

2 个答案:

答案 0 :(得分:2)

试试这个:

${string?replace("-"," ")?word_list?last}

答案 1 :(得分:1)

您可以将正则表达式与捕获组一起使用:

<#assign string="first-second-third-100201" />
${string?replace("-([^-]*)$", "/$1", "r")}

输出为first-second-third/100201

在正则表达式中,([^-]*)捕获最后一个-之后的子字符串。在替换字符串中,$1将替换为捕获组的值。