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

正则匹配异常求助:需排除末尾下划线与重复下划线非法字符串

修正正则表达式以排除非法格式

修正后的正则表达式

针对你的需求,修正后的正则表达式如下:

\"(?:[A-Z]+_)+\"\+\$\{[a-z]+}(?:\+\"_[A-Z]+(?:_[A-Z]+)*\")?

对应Java中的转义版本:

"\"(?:[A-Z]+_)+\"\\+\\$\\{[a-z]+}(?:\\+\"_[A-Z]+(?:_[A-Z]+)*\")?"

关键改动说明

原正则的问题出在可选后缀部分,核心调整如下:

  1. 替换原有的_{1}[A-Z_]+为_[A-Z]+(?:_[A-Z]+)*:
    • _[A-Z]+:强制后缀以_加至少一个大写字母开头,直接规避__PRODUCT这类连续下划线的非法情况
    • (?:_[A-Z]+)*:允许后续出现_大写字母的组合,但每个_后必须紧跟大写字母,同时确保后缀最终以大写字母结尾,排除_PRODUCT_这类末尾带下划线的格式
  2. 移除了多余的{1}声明(_默认匹配1次,无需显式标注),简化正则结构

验证Java代码示例

import java.util.regex.Pattern;

public class RegexTest {
    public static void main(String[] args) {
        // 合法测试用例
        String valid1 = "\"TEST_PROCESS_\"+${variable}";
        String valid2 = "\"TEST_PROCESS_\"+${variable}+\"_PRODUCT\"";
        String valid3 = "\"TEST_PROCESS_\"+${variable}+\"_PRODUCT_NEW\"";
        
        // 非法测试用例
        String invalid1 = "\"TEST_PROCESS_\"+${variable}+\"_PRODUCT_\"";
        String invalid2 = "\"TEST_PROCESS_\"+${variable}+\"__PRODUCT\"";
        
        String regex = "\"(?:[A-Z]+_)+\"\\+\\$\\{[a-z]+}(?:\\+\"_[A-Z]+(?:_[A-Z]+)*\")?";
        
        System.out.println(Pattern.matches(regex, valid1));   // 输出true
        System.out.println(Pattern.matches(regex, valid2));   // 输出true
        System.out.println(Pattern.matches(regex, valid3));   // 输出true
        System.out.println(Pattern.matches(regex, invalid1)); // 输出false
        System.out.println(Pattern.matches(regex, invalid2)); // 输出false
    }
}

效果说明

  • 完全匹配你列出的三种合法格式
  • 自动拦截两类非法字符串:
    • 后缀末尾带下划线的格式
    • 包含连续下划线的格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:06:40