【问题标题】:Freemarker: Selecting last instance of character in stringFreemarker:选择字符串中字符的最后一个实例
【发布时间】:2014-03-19 00:22:26
【问题描述】:

所以我有一个字符串,例如“first-second-third-100201”。我想选择最后一个 - 并用 / 替换它。

如果我想替换第一个实例,我可以这样做

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

将“f”作为第一个参数作为第三个参数。但是,Freemarker 似乎没有类似的内置“last”来选择破折号的最后一个实例。

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

编辑:

所以这很丑陋,但它在技术上是可行的。

<#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}

计算为 first-second-third/100201

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

【问题讨论】:

  • 非常感谢大家!今天早上要试一试,会回来报告的。

标签: java regex freemarker


【解决方案1】:

试试这个:

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

【讨论】:

  • 让我有 URL /abc/def/ghi/hkl... 如何获取前三个单词 /abc/def/ghi 的值?
【解决方案2】:

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

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

输出是first-second-third/100201

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-31
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 2021-02-09
    • 1970-01-01
    • 2012-11-19
    相关资源
    最近更新 更多