我有以下字符串ColdFusion的 - 從標籤
Brad Thorm signs for the <hash>All Blacks</hash>
它可能不是「全黑」的標記之間,它可以是任何文字刪除空格。我需要解析此字符串,這樣當遇到了<hash></hash>
標籤:
- 從標籤之間的字符串,即「全黑」應該成爲「AllBlacks」
- 添加「#」符號刪除所有空格到標籤之間的字符串的前面,即「AllBlacks」變成「#AllBlacks」
尋找最乾淨的方式來做到這一點。
我有以下字符串ColdFusion的 - 從標籤
Brad Thorm signs for the <hash>All Blacks</hash>
它可能不是「全黑」的標記之間,它可以是任何文字刪除空格。我需要解析此字符串,這樣當遇到了<hash></hash>
標籤:
尋找最乾淨的方式來做到這一點。
返工Chris的代碼放到一個函數和循環的陣列,這適用於多個哈希實例所提供的字符串中:
<cffunction name="renderHash" output="false" returnType="string">
<cfargument name="text" required="true" type="string" hint="The text to render." />
<cfset var strText = arguments.text />
<cfset var strHash = '' />
<cfset var arrMatches = reMatch("<hash>(.*?)</hash>", arguments.text) />
<cfloop array="#arrMatches#" index="i">
<cfset strHash = reReplace(i, "<hash>(.*?)</hash>", "\1") />
<cfset strHash = reReplace(strHash, "[[:space:]]", "", "ALL") />
<cfset strHash = "##" & strHash />
<cfset strText = replace(strText, i, strHash) />
</cfloop>
<cfreturn strText />
</cffunction>
傳遞給轉換成函數的字符串,就大功告成了:
<cfset strText = '<hash>Brad Thorm</hash> signs for the <hash>All Blacks</hash>' />
<cfset strConverted = renderHash(strText) />
可能有簡潔的方式來做到這一點,但是這會變成標籤之間的任何文本轉換爲#hashtag,並處理多個標籤的字符串
<cfscript>
text = "<hash>Brad Thorm</hash> signs for the <hash>All Blacks</hash>";
matches = rematch("<hash>(.*?)</hash>", text);
for(match in matches) {
hashtag = reReplace(match, "<hash>(.*?)</hash>", "\1");
hashtag = reReplace(hashtag, "\W", "", "all");
hashtag = "##" & hashtag;
text = replace(text, match, hashtag);
}
writeoutput(text);
</cfscript>
謝謝克里斯,這是失敗的(火柴比賽)。我認爲這是因爲匹配是一個數組,而不是一個結構。 – user460114
你沒有說你使用哪個版本的CF,在CF9 +中支持for-in循環的數組。馬特將我的代碼轉換爲基於標籤的功能應該適合您。 –
我確實想過把這個功能作爲一個功能,但是你得讓人們爲自己做點什麼;) –
完美。謝謝。 – user460114
請注意,亞光的代碼僅刪除空格,而我的原始代碼將刪除任何非單詞字符。取決於如何生成這些內容,您需要確定哪些內容適合 –