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

如何编写正则表达式匹配含指定字符串的单个YARA规则

匹配包含特定字符串的单个YARA规则正则方案

问题分析

你当前使用的正则^rule\s[\s\S]*?(?=BANANAS)[\s\S]*?^\}$会跨规则匹配,核心原因是[\s\S]*?会无差别匹配任意字符(包括换行和其他规则内容),导致从第一个规则开始抓取,直到找到BANANAS所在规则的结尾,中间无关规则也被包含进来。

解决方案

使用负向前瞻限制匹配范围,确保只在单个规则内部查找目标字符串,不会跨越到其他规则。修正后的正则如下:

(?:^|\n)rule\s(?:(?!(?:^|\n)rule)[\s\S])*BANANAS(?:(?!(?:^|\n)rule)[\s\S])*(?:^|\n)\}

正则各部分说明

  • (?:^|\n)rule\s:匹配YARA规则的起始位置,确保是文件开头或换行后的rule关键字(避免匹配规则内部的rule字符串)
  • (?:(?!(?:^|\n)rule)[\s\S])*:非捕获组,匹配任意字符,但前提是当前位置不是新规则的起始(通过负向前瞻(?!(?:^|\n)rule)实现),保证匹配范围不跨越到下一个规则
  • BANANAS:精确匹配目标字符串
  • (?:(?!(?:^|\n)rule)[\s\S])*:继续匹配规则剩余内容,同样限制在当前规则内部
  • (?:^|\n)\}:匹配规则的闭合大括号,确保是文件开头或换行后的独立行(符合YARA规则的格式规范)

验证逻辑

这个正则会逐个扫描规则,只捕获包含BANANAS的完整规则,完全避免跨规则匹配的问题,同时满足你要求的:

  • 不使用内置多行匹配函数
  • 用[\s\S]替代.*匹配任意字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:13:14