正则表达式匹配OBJECT_TYPE需求:无法捕获全部目标项求助
解决OBJECT_TYPE精准匹配的正则方案
你的原正则核心问题是负前瞻逻辑搞反了,同时没处理域名前缀(比如AUX_DB.)、未转义正则特殊字符,导致漏匹配和误匹配。针对你的需求,正确的正则表达式如下:
(?<=^|\.|Stage_|CORE_)OBJECT_TYPE(?=_POST|_TEMP|\.ddl|\.sql|\b)
正则规则拆解:
(?<=^|\.|Stage_|CORE_):正向后瞻,确保OBJECT_TYPE的前置内容只能是以下情况之一:^:行开头(无前缀的场景)\.:点号(适配AUX_DB.这类域名后缀后的位置)Stage_/CORE_:你允许的合法前缀
OBJECT_TYPE:需要匹配替换的目标字符串(?=_POST|_TEMP|\.ddl|\.sql|\b):正向前瞻,确保OBJECT_TYPE的后置内容只能是以下情况之一:_POST/_TEMP:指定后缀\.ddl/\.sql:转义后的扩展名(点号是正则特殊字符,必须转义才能匹配真实的点)\b:单词边界(对应OBJECT_TYPE单独存在的场景)
匹配效果验证:
会精准命中你列出的前6行目标:
OBJECT_TYPE.sql
OBJECT_TYPE_POST.sql
Stage_OBJECT_TYPE.sql
AUX_DB.OBJECT_TYPE.ddl
CORE_DB.CORE_OBJECT_TYPE_TEMP.ddl
CORE_DB.CORE_OBJECT_TYPE_POST.ddl
同时完全排除后续不符合规则的行,比如OBJECT_TYPE_ID(后缀为_ID不在允许范围)、CR_OBJECT_TYPE_POST.sql(前缀为CR_非合法前缀)等场景。
内容的提问来源于stack exchange,提问作者jbrezik
相关产品推荐
相关产品推荐

