ColdFusion-从标记之间的文本中删除空格
我有以下字符串ColdFusion-从标记之间的文本中删除空格,coldfusion,Coldfusion,我有以下字符串 Brad Thorm signs for the <hash>All Blacks</hash> 标签之间可能不全是黑色,可能是任何东西。我需要解析此字符串,以便在遇到标记时: 从标记之间的字符串中删除所有空格,即所有黑色应变为所有黑色 在标签之间的字符串前面添加一个符号,即AllBlacks变为AllBlacks 正在寻找最干净的方法来完成此操作。可能有更干净的方法来完成此操作,但这会将标记之间的任何文本转换为哈希标记,并在字符串中处理多个标记 <
Brad Thorm signs for the <hash>All Blacks</hash>
标签之间可能不全是黑色,可能是任何东西。我需要解析此字符串,以便在遇到标记时:
从标记之间的字符串中删除所有空格,即所有黑色应变为所有黑色
在标签之间的字符串前面添加一个符号,即AllBlacks变为AllBlacks
正在寻找最干净的方法来完成此操作。可能有更干净的方法来完成此操作,但这会将标记之间的任何文本转换为哈希标记,并在字符串中处理多个标记
<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>
可能有更简洁的方法可以做到这一点,但这会将标记之间的任何文本转换为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>
将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) />
将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) />
谢谢Chris,比赛中的formatch失败了。我认为这是因为matches是一个数组,而不是一个结构。您没有说您使用的是哪个版本的CF,因为在CF9+中支持数组内循环。Matt将我的代码转换为基于标记的函数应该对你有用。谢谢Chris,它在匹配中的formatch失败了。我认为这是因为matches是一个数组,而不是一个结构。您没有说您使用的是哪个版本的CF,因为在CF9+中支持数组内循环。Matt将我的代码转换为基于标记的函数应该对你有用。我确实想过将其作为函数来表示,但你必须让人们自己做一些事情;请注意,matt的代码只删除空格,而我的原始代码删除任何非单词字符。根据这些内容是如何生成的,你需要决定哪一个是合适的,我确实想过将其作为一个函数来呈现,但你必须让人们自己做一些事情;请注意,matt的代码只删除空格,而我的原始代码删除任何非单词字符。根据这些内容的生成方式,您需要决定哪一个是合适的