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

如何编写正则表达式匹配含指定字符串且不含另一字符串的行

如何用正则匹配包含"app prod"且不含"ignore"的行

问题描述

假设我有以下行:

  1. blah app prod blah blah
  2. blah app prod blah ignore
  3. blah app staging blah blah
  4. blah app staging blah ignore
  5. blah app prod blah blah blah ignore blah blah
  6. blah blah

我想要编写一个正则表达式,匹配所有包含"app prod"且不包含"ignore"的行,即仅匹配第1行。我尝试了正则表达式.*app prod.*((?!ignore).)*,但它返回了第1、2、5行,请问正确的正则表达式应该怎么写?

问题分析

你之前的正则失效原因很明确:.*app prod.*会优先匹配到"app prod"之后的所有内容(包括"ignore"),后续的((?!ignore).)*从行尾位置开始匹配,根本触发布局否定断言,所以会错误匹配含"ignore"的行。

正确正则表达式

方案一:纯正则通用写法

这是最可靠的纯正则方案,直接在开头用负向预查排除所有包含"ignore"的行,再匹配目标内容:

^(?!.*ignore).*app prod.*$

各部分含义:

  • ^:匹配行的起始位置
  • (?!.*ignore):负向预查,断言整行中不存在"ignore"字符串
  • .*app prod.*:匹配包含"app prod"的任意内容
  • $:匹配行的结束位置

方案二:工具辅助简化写法

如果使用的工具支持反向过滤(比如grep的-v参数),可以拆分两步操作:先过滤掉含"ignore"的行,再匹配含"app prod"的行:

# 示例:用grep实现
grep -v "ignore" | grep "app prod"

但纯正则场景下,方案一的写法通用性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:22:32