正则表达式以匹配中间的certian特殊字符

用户1476092

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

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

  2. 不允许包含多个特殊字符的序列

  3. 允许的特殊字符为:冒号,连字符(减号),句号(句号)和下划线

我做了一些分析,并建立了正则表达式:

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));
            }

    }

你能检查我在哪里做错了吗。

汤玛士

如果您专注于特殊字符的部分,则编写起来会更容易然后,该字符串如下所示(以EBNF表示法):

<word> (<special-char> <word>)*
  • <word>一个或多个字母数字字符的序列[A-Za-z0-9]+
    通过要求a<word>不为空,我们保证不会<special-char>出现一个以上的序列
  • <special-char>也正是一个特殊字符:[-:._]
    -放在第一位,所以我们不必逃避它。

把它放在一起:

^[A-Za-z0-9]+([-:._][A-Za-z0-9]+)*$

Regex101演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章