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

C语言POSIX ERE正则:如何在可选组存在时停止匹配?

POSIX ERE正则分组捕获修正方案

你的定向比较_链接Back支持用想到RM把� 正则([[:alnum:] ]+) (A)? ?([[:digit:]]{4})出现分组错位,核心原因是[[:alnum:] ]+的贪婪匹配特性——它会尽可能多匹配字符(包括空格和"A"),直到后续模式能匹配为止。加上POSIX ERE不支持非捕获组(?:...)和非贪婪量词(+?/*?`),需要改用分支匹配的思路解决。

正确正则表达式

使用分支结构覆盖两种输入场景(含token2和不含token2),同时锚定整个字符串避免部分匹配:

^([[:alnum:] ]+) (A) ([[:digit:]]{4})$|^([[:alnum:] ]+) ([[:digit:]]{4})$

分组匹配规则

  • 当输入包含"A"(如R2D2 A 2250),匹配第一个分支:
    组1 = token1(R2D2),组2 = token2(A),组3 = token3(2250)
  • 当输入不含"A"(如R2D2 2250),匹配第二个分支:
    组4 = token1(R2D2),组5 = token3(2250)

C语言代码处理逻辑

匹配后通过regmatch_t数组判断分组有效性:

  1. 检查pmatch[2].rm_so是否不等于-1(组2有内容),若是则直接取组1、组2、组3的内容;
  2. 若组2无内容,则取组4、组5的内容作为token1和token3,token2设为空字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:17:03