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

Java正则表达式编写需求:基于指定合法/非法字符串与规则

解决方案

要满足你的需求,我们可以构建一个兼顾平衡匹配、y的存在性和**$的位置唯一性**的Java正则表达式。先明确核心规则:

  • 字符串必须以唯一的$结尾
  • 必须包含至少一个y
  • <t>和<\t>(也就是你示例里的< >,对应<加制表符的序列)的出现次数必须完全相等
  • 只能包含y、<t>、<\t>和结尾的$

正则表达式代码

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class RegexValidator {
    public static void main(String[] args) {
        // 核心正则表达式
        String regex = "^(?=.*y)(?:<t>(?<DEPTH>)|<\\t>(?<-DEPTH>)|y)+(?(DEPTH)(?!))\\$$";
        Pattern pattern = Pattern.compile(regex);
        
        // 测试合法示例
        String[] validStrings = {
            "yyyyy$",
            "<t>yy\t>$", // 此处\t对应示例中的<	>
            "<t><t>yyyyy\t>\t>$",
            "<t><t>y\t>y\t><t>yyyyy\t>yy$"
        };
        
        // 测试非法示例
        String[] invalidStrings = {
            "<t>\t>$",
            "<t>yy<t>\t>$"
        };
        
        // 验证合法字符串
        System.out.println("合法字符串验证结果:");
        for (String s : validStrings) {
            Matcher matcher = pattern.matcher(s);
            System.out.printf("'%s' → %b%n", s, matcher.matches());
        }
        
        // 验证非法字符串
        System.out.println("\n非法字符串验证结果:");
        for (String s : invalidStrings) {
            Matcher matcher = pattern.matcher(s);
            System.out.printf("'%s' → %b%n", s, matcher.matches());
        }
    }
}

正则细节拆解

让我们逐个解释正则的关键部分:

  • ^:锚定字符串开头,确保匹配从第一个字符开始
  • (?=.*y):正向预查,强制要求字符串中至少包含一个y,没有的话直接匹配失败
  • (?:<t>(?<DEPTH>)|<\\t>(?<-DEPTH>)|y)+:非捕获组,重复匹配三种允许的内容:
    • <t>(?<DEPTH>):匹配<t>序列,同时给命名捕获组DEPTH的计数加1
    • <\\t>(?<-DEPTH>):匹配<\t>序列(对应示例里的< >),同时给DEPTH计数减1
    • y:匹配单个y字符
  • (?(DEPTH)(?!)):条件判断,如果DEPTH的最终计数不为0(也就是<t>和<\t>数量不相等),则匹配失败
  • \\$$:匹配结尾的$(第一个\转义正则里的特殊字符$,第二个$锚定字符串结尾,确保$只能出现在最后且唯一)

注意事项

  • 该正则依赖Java 7及以上的命名捕获组和平衡匹配特性,如果你使用更早的Java版本,需要调整实现逻辑
  • 若你示例中的< >不是<加制表符,只需替换正则里的<\\t>部分为对应的序列即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:51:32