Coldfusion: как разбить строку на набор переменных
Я пытаюсь научить себя ColdFusion.
У меня есть строка, поступающая из базы данных в этом формате:
domain.com
<br/>
www.facebook.com/facebookpage
<br/>
http://instagram.com/instagrampage
Все это происходит из # getRacer.txtDescription #. Формат этого текста всегда будет одинаковым.
Мне нужно разбить его на 3 переменные. Я попробовал это (полученное из примера на сайте adobe)
<h3>ListToArray Example</h3>
<cfset myList = ValueList(getRacer.txtDescription)>
<p>My list is a list with <cfoutput>#ListLen(myList)#</cfoutput> elements.
<cfset myArrayList = ListToArray(myList,'<br/>')>
<p>My array list is an array with
<cfoutput>#ArrayLen(myArrayList)#</cfoutput> elements.
Я как-то закончил с 11 элементами в массиве.
Спасибо
Ответы
Ответ 1
Это должно сработать.
<cfset TestSTring = "domain.com<br/>www.facebook.com/facebookpage<br/>http://instagram.com/instagrampage">
<cfset a = TestString.Split("<br/>")>
Причина ListtoArray
отображает 11 элементов, потому что ColdFusion обрабатывает каждый символ в строке разделителя (<br/>
) в качестве отдельного разделителя
На основе комментария @Leigh, обновляющего мой ответ, чтобы люди научились API Coldfusion, а не занимались функциями Java, также будет работать <cfset a = ListToArray(TestString, "<br/>", false, true)>
. Спасибо Ли.
Примечание. false
в конце для флага includeEmptyFields
, а true
- для флага multiCharacterDelimiter
. См. документы.
Ответ 2
<cfset myList = ReplaceNoCase(getRacer.txtDescription,'<br/>','|','ALL')>
<cfset myArrayList = ListToArray(myList,'|')>
Я выбрал символ канала, потому что он вряд ли уже существует в вашей строке. Если вы хотите учесть возможность того, что ваш тег BR может или не может использовать синтаксис XML, вы можете задать регулярное выражение:
<cfset myList = ReReplaceNoCase(str,'<br/?>','|','ALL')>
<cfset myArrayList = ListToArray(myList,'|')>