2015-05-21 75 views
2

我正在使用RefindNoCase查找字符串的最後一次出現。 這是我使用的代碼:ColdFusion - 使用RefindNoCase最後一次出現字符串

<cfset result= REfindNoCase('-[A-Z]{3}', variables.textBeforeFirstName, 1, "true")> 

這應該返回以在每次出現時的位置和長度的陣列,但它會返回只有第一個。 關於特定的字符串,我有3次出現,我只需要最後一次。因爲我不知道每個字符串有多少次出現,我應該如何得到最後一次?

+0

你可以添加字符串來嘗試。 –

+0

「這應該返回一個數組,其位置和長度爲每個事件」。不,這不對。重新閱讀文檔。您可能想要使用'rematch()',而不是'refind()' –

回答

0

我找到了一個手動解決方案作爲解決方法,因爲它似乎沒有Coldfusion匹配所有情況的功能。 我所做的是創建一個搜索子字符串的循環,如果它找到它,那麼它會從當前字符串中刪除以前的文本。當剩餘字符串中沒有其他出現時,循環停止,因此變量中的最後一次出現是您要查找的內容。這是代碼:

<cfloop condition="continueParse eq true"> 

     <cfset airportService= REfindNoCase('-[A-Z]{3}', variables.textBeforeFirstName, 1, "true")> 

     <cfif airportService.len[1] gt 0> 

      <cfset variables.airportServiceName = #mid(variables.textBeforeFirstName,airportService.pos[1],airportService.len[1])#> 

      <cfset variables.textBeforeFirstName = #right(variables.textBeforeFirstName,#len(variables.textBeforeFirstName)#-(airportService.pos[1]+airportService.len[1]))#> 
      #variables.airportServiceName#<br/> 

     <cfelse> 
      <cfset continueParse = false> 
     </cfif> 
    </cfloop> 
+0

請嘗試我寫的答案 –

+2

*似乎沒有Coldfusion匹配所有情況的功能*是有:reMatch和reMatchNoCase。也就是說,有可能有一種更簡單/更有效的方法。您能否用您正在測試的實際字符串以及預期結果的示例更新您的問題? – Leigh

2

你可以試試這個。

<cfset result= REfindNoCase('-[A-Z]{3}$', variables.textBeforeFirstName, 1, "true")> 


<cfoutput> 
    #result.pos[1]# 
</cfoutput> 
相關問題