正则匹配异常求助:需排除末尾下划线与重复下划线非法字符串
修正正则表达式以排除非法格式
修正后的正则表达式
针对你的需求,修正后的正则表达式如下:
\"(?:[A-Z]+_)+\"\+\$\{[a-z]+}(?:\+\"_[A-Z]+(?:_[A-Z]+)*\")?
对应Java中的转义版本:
"\"(?:[A-Z]+_)+\"\\+\\$\\{[a-z]+}(?:\\+\"_[A-Z]+(?:_[A-Z]+)*\")?"
关键改动说明
原正则的问题出在可选后缀部分,核心调整如下:
- 替换原有的
_{1}[A-Z_]+为_[A-Z]+(?:_[A-Z]+)*:_[A-Z]+:强制后缀以_加至少一个大写字母开头,直接规避__PRODUCT这类连续下划线的非法情况(?:_[A-Z]+)*:允许后续出现_大写字母的组合,但每个_后必须紧跟大写字母,同时确保后缀最终以大写字母结尾,排除_PRODUCT_这类末尾带下划线的格式
- 移除了多余的
{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
相关产品推荐
相关产品推荐

