【问题标题】:regular expression to match certian special chars in middle正则表达式匹配中间的某些特殊字符
【发布时间】:2020-10-19 12:05:40
【问题描述】:

我正在尝试使用以下条件构建 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));
            }

    }

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

【问题讨论】:

    标签: java regex


    【解决方案1】:

    如果您专注于 不是 特殊字符的部分,则编写起来会更容易。然后字符串看起来像这样(EBNF 表示法):

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

    把它放在一起:

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

    Regex101 demo

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-09
      相关资源
      最近更新 更多