我试图让 ColdFusion 的 REFindNoCase 函数返回匹配字符串的多个实例,但似乎无法让它工作:
<cfset string2test="cfid skldfjskdl cfid sdlkfjslfjs cftoken dslkfjdslfjks cftoken">
<cfset CookieCheck = REFindNoCase( 'CFTOKEN', string2test, 1, true)>
<cfif arrayLen( CookieCheck['LEN'] ) gt 1>
MULTIPLE CFTOKEN!
</cfif>
是否需要使用正则表达式魔术语法来使其搜索超过 1 个?
最佳答案
上述代码的语法将为模式匹配和子表达式创建包含数组 (LEN,POS) 的结构。 RegEx 子表达式在模式的括号内。 “CFTOKEN”模式不包含子表达式。
我不认为 REFindNoCase 会完成您想要完成的事情。
例如,如果您使用 '.*?(cftoken)' 作为模式:
<cfset CookieCheck = REFindNoCase('.*?(CFTOKEN)', string2test, 1, true)>
(CFTOKEN) 是一个子表达式。如果删除“?”,将返回最后一次出现的“cftoken”的信息。
第一个数组项中的值将匹配整个模式,直到第一个“cftoken”(字符串的前 40 个字符)。第二组值将标识在第一个匹配项(前 40 个字符)中找到的“cftoken”字符串。
因为示例中的语句不包含子表达式,所以只返回第一个模式匹配。
如果您需要检查某个内容是否被多次列出或者您不需要操作原始字符串,我建议使用 REMatchNoCase()。它返回一个模式匹配数组,但没有位置信息。
关于coldfusion - 使用 REFind 查找字符串中的多次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18727452/