如何调整正则表达式匹配{word}内容且跳过[[ ]]包裹的对应项
正则表达式调整方案
方案1:兼容PCRE引擎(推荐)
如果你使用的正则引擎支持PCRE特性(如PHP、Python regex库、Java 9+、Go等),可以使用更简洁的跳过规则:
\[\[.*?]](*SKIP)(*F)|{([^:]*?)}
匹配逻辑说明:
- 首先用
\[\[.*?]]匹配所有被[[ ]]包裹的全部内容,通过(*SKIP)(*F)标记这部分内容直接跳过,不参与后续捕获 - 后半部分
|{([^:]*?)}沿用你原有的匹配规则,仅捕获未被双方括号包裹的{word}格式内容 - 针对你的测试用例
{?:participants::lookup(.,{eeid},[[{catalog}]])},该正则仅会捕获到eeid,完全符合需求。
方案2:兼容低版本/通用正则引擎
如果你使用的引擎不支持(*SKIP)(*F)语法(如JavaScript原生正则、Python标准re库),可以用正负向断言实现:
(?<!\[\[[^\]]*){([^:]*?)}(?![^\[]*]])
匹配逻辑说明:
(?<!\[\[[^\]]*)负向回顾断言:确保当前匹配的{前方,没有未被]]闭合的[[- 中间
{([^:]*?)}是你原有的匹配规则 (?![^\[]*]])负向前瞻断言:确保当前匹配的}后方,没有和前方[[对应的未闭合]]- 该方案默认不支持
[[ ]]嵌套,如有嵌套使用需求可以针对性调整规则。
内容的提问来源于stack exchange,提问作者Everett McCoy
相关产品推荐
相关产品推荐

