有没有办法在coldfusion中写一些像:
< cfset ReReplace(value,"&#\d+;","#decodeHtmlEntity(\1)#", "all") >
非常感谢
答案 0 :(得分:1)
简短的回答是“不”。
CF本身不处理正则表达式执行。它交给了一个Java库(Oro,IIRC)来处理它。这意味着您调用的任何CF函数都会在 toe regex之前执行。
有一种解决方法,虽然它不像能够传递函数那样优雅。使用reFind()来发现您正在寻找的所有实例,并逐个重新编译它们。如果你做的是自上而下的替换(例如,如果有3个实例,做第3个,然后是第2个,那么第1个)你的每个匹配的起点将保持在同一个位置,所以你可以重新找到所有,而不是在循环中进行reFind。
HTH。
答案 1 :(得分:0)
如果您想将正则表达式值替换为decodeHTMLEntity的参数,我认为这不会起作用。
更新:
<cfset myVar = ReReplace("ABC123DEF","(\d+)",addOne('\1'), "all") >
<cffunction name="addOne" access="public" output="false" returntype="string">
<cfargument name="arg1" required="true" type="string" />
<cfreturn arg1 + 1>
</cffunction>
<cfdump var="#myvar#">
上面的代码是为了从文本中找到123而添加一个,但这不起作用,因为arg1将具有\ 1,这不是数值。
答案 2 :(得分:-1)
您是否尝试过使用URLDecode(值)?
或者,如果您只是想要解码数字html代码,那么
<cfset myVar = ReReplace(value,"(&##[\d+];)",urlDecode('\1'), "all") >
会做你需要的。
解释它在做什么: