2015-05-21 6 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> 

 Смежные вопросы

  • Нет связанных вопросов^_^