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

正则非贪婪匹配:如何提取最后一个‘-’与‘@’间的目标内容?

提取message_id中最后一个'-'与'@'之间的内容

给定字符串:

message_id = "7bb19406-f97a-47b3-b42c-40868d2cef5b-1661496224@example.com"

需求是提取最后一个-与@之间的内容,即1661496224。当前使用的正则/(?<=\-).*(?=\@)/会匹配第一个-到@之间的所有内容,结果不符合预期。

解决方案

以下几种方法可以实现目标:

方法1:使用捕获组匹配(推荐)

通过正则捕获最后一个-到@之间的内容,代码如下:

message_id = "7bb19406-f97a-47b3-b42c-40868d2cef5b-1661496224@example.com"
result = message_id.match(/-([^@]+)@/)[1]
puts result # 输出:1661496224

正则说明:-匹配最右侧的短横线(正则默认贪婪匹配,会优先匹配最后一个符合条件的-),([^@]+)捕获所有非@的字符直到遇到@,通过[1]直接获取捕获到的目标内容。

方法2:调整正向反向预查正则

修改正则规则,匹配不含-的内容,避免跨过多短横线:

message_id = "7bb19406-f97a-47b3-b42c-40868d2cef5b-1661496224@example.com"
result = message_id.match(/(?<=-)[^-]*(?=@)/)[0]
puts result # 输出:1661496224

正则说明:(?<=-)确保匹配内容前是-,[^-]*匹配任意非-的字符(自然停在最后一个-之后),(?=@)确保匹配内容后是@。

方法3:字符串分割法

无需正则,通过字符串分割逻辑实现:

message_id = "7bb19406-f97a-47b3-b42c-40868d2cef5b-1661496224@example.com"
result = message_id.split('@')[0].split('-').last
puts result # 输出:1661496224

逻辑说明:先按@分割取前面的部分,再按-分割取最后一个元素,直接得到目标内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:45:50