Java 正则表达式匹配中间的特定字符

Java 正则表达式匹配中间的特定字符,java,regex,Java,Regex,我正在尝试使用以下条件构建java正则表达式: 标识符不能以特殊字符开头或结尾 不允许多个特殊字符的序列 允许的特殊字符有:冒号、连字符(减号)、句号(句号)和下划线 我做了一些分析并构建了正则表达式: String regularexp=“^[A-Za-z0-9](?:,/-/.*?[^A-Za-z0-9]{2})。*?[A-Za-z0-9]$”但不知为什么它不起作用 final Pattern pattern = Pattern.compile(regex); fina

我正在尝试使用以下条件构建java正则表达式:

  • 标识符不能以特殊字符开头或结尾

  • 不允许多个特殊字符的序列

  • 允许的特殊字符有:冒号、连字符(减号)、句号(句号)和下划线

  • 我做了一些分析并构建了正则表达式:

    String regularexp=“^[A-Za-z0-9](?:,/-/.*?[^A-Za-z0-9]{2})。*?[A-Za-z0-9]$”但不知为什么它不起作用

    final Pattern pattern = Pattern.compile(regex);
            final Matcher matcher = pattern.matcher(string);
    
            while (matcher.find()) {
                System.out.println("Full match: " + matcher.group(0));
                for (int i = 1; i <= matcher.groupCount(); i++) {
                    System.out.println("Group " + i + ": " + matcher.group(i));
                }
    
        }
    
    final Pattern=Pattern.compile(regex);
    final Matcher Matcher=pattern.Matcher(字符串);
    while(matcher.find()){
    System.out.println(“完全匹配:+matcher.group(0));
    
    对于(int i=1;i而言,如果关注非特殊字符的部分,则更容易编写。然后字符串如下所示(在EBNF表示法中):

    <word> (<special-char> <word>)*
    
    ^[A-Za-z0-9]+([-:._][A-Za-z0-9]+)*$