2014-02-18 69 views
2

所以我有一個字符串,類似「first-second-third-100201」。我想選擇最後一個 - 並用/替換它。Freemarker:在字符串中選擇字符的最後一個實例

如果我想更換的第一個實例,我可以做類似

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

計算爲第一,第二,第三/ 100201

任何人有一個更簡單/更優雅的解決方案?

+0

非常感謝!今天早上要給這兩個鏡頭一個鏡頭,會報告回來。 – Brendon

回答

1

您可以使用正則表達式與捕獲組:

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

輸出爲first-second-third/100201

在正則表達式中,([^-]*)捕獲最後一個-後面的子串。在替換字符串中,$1被捕獲組的值替換。

2

試試這個:

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

讓我有URL/abc/def/ghi/hkl ...我如何得到前三個單詞/ abc/def/ghi的值? –

相關問題