You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式提取两个波浪线(~)间内容的技术求助

提取两个波浪线之间内容的ColdFusion正则解决方案

正确实现方式

方式一:用reReplace替换保留目标内容

修改正则逻辑,将整个字符串替换为捕获到的中间内容:

<cfset Type = reReplace(BetweenTildeCHR, "^.*~([^~]+)~.*$", "\1", "all") />
  • 正则解析:
    • ^.*~:匹配从字符串开头到第一个波浪线的所有字符
    • ([^~]+):捕获两个波浪线之间的所有非波浪线字符(确保只提取中间一段)
    • ~.*$:匹配从第二个波浪线到字符串结尾的所有字符
    • 替换为\1:引用捕获到的中间内容,最终只保留目标部分

方式二:用reFind直接提取捕获组

如果只需要单次提取,reFind能更精准地获取目标内容:

<cfset matchResult = reFind("~([^~]+)~", BetweenTildeCHR, 1, true) />
<cfif matchResult.len[2] > 0>
    <cfset Type = mid(BetweenTildeCHR, matchResult.pos[2], matchResult.len[2]) />
</cfif>
  • 第四个参数设为true,reFind会返回包含捕获组位置和长度的结构体
  • 通过mid函数截取捕获到的中间内容

原代码失败原因

你之前的写法错误地将匹配到的内容替换成了空格,而非保留捕获的目标内容。例如.*?~(.*?)~.*虽然能定位到中间内容,但替换为空格会清空整个字符串,而非引用\1保留捕获部分。

内容的提问来源于stack exchange,提问作者Gary Robinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 13:42:38