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

PCRE正则匹配:如何排除含FCMP的行匹配指定数值表达式

解决思路:用负向前瞻排除指定行

这问题我之前处理汇编指令匹配时碰到过类似的,核心就是先排除包含FCMP的行,再匹配你要的#X.Y格式表达式,用正则的负向前瞻就能轻松实现。

最终正则表达式

^(?!.*FCMP).*#-?\d+\.\d

逐部分解释

  • ^:锚定到行的开头,确保我们从整行的起始位置开始判断
  • (?!.*FCMP):负向前瞻断言,意思是「从当前位置往后,整个行里都不能出现FCMP这个字符串」,直接把所有含FCMP的行排除在外
  • .*:匹配行开头到目标表达式之间的任意内容(比如汇编行里的地址、指令名这些前缀)
  • #-?\d+\.\d:这是你要匹配的目标格式,我调整了原正则让它更精准:
    • #:匹配固定的#符号
    • -?:匹配可选的负号(支持#-1.0这种带负号的情况)
    • \d+:匹配一个或多个整数位数字
    • \.:转义后的点号(避免正则里的通配符.干扰)
    • \d:匹配至少一个小数位数字

验证示例

  • 能匹配的行:.text:00000000005A2F7C FMOV D1, #1.0 → 行内无FCMP,且包含符合格式的#1.0
  • 会跳过的行:.text:00000000005A2F70 FCMP D0, #0.0 → 因为行内有FCMP,被负向前瞻直接排除

额外小技巧

如果你的工具支持分步处理(比如命令行),也可以拆成两步更直观:

  1. 先过滤掉所有含FCMP的行:grep -v FCMP your_file.txt
  2. 再从剩下的行里匹配目标表达式:grep -E '#-?\d+\.\d'

这样拆分有时候比写复杂正则更容易维护,看你使用的场景来选就行。

内容的提问来源于stack exchange,提问作者Дима Попиль

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:57:55