如何在正则表达式中表示重复次数的修正数?

Ken*_*Ken 43 java regex

我想知道是否有更好的代表正则表达式中的重复数量.例如,如果我只想匹配14个字母/数字,我使用^\w\w\w\w\w\w\w\w\w\w\w\w\w\w$哪个会匹配一个单词UNL075BE499135而不匹配UNL075BE499135AAA 是否有方便的方法呢?我现在正在java中这样做,但我想这可能也适用于其他语言.提前致谢.

sho*_*ter 66

对于Java:

量词文档

X,恰好n次:X {n}
X,至少n次:X {n,}
X,至少n但不超过m次:X {n,m}

  • 这适用于任何与perl兼容的正则表达式. (9认同)

pol*_*nts 24

有限重复语法用于{m,n}代替星号/加号/问号.

来自java.util.regex.Pattern:

X{n}      X, exactly n times
X{n,}     X, at least n times
X{n,m}    X, at least n but not more than m times
Run Code Online (Sandbox Code Playgroud)

所有重复元字符具有相同的优先级,所以就像您可能需要为分组*,+?,你也可以{n,m}.

  • ha* 匹配例如 "haaaaaaaa"
  • ha{3} 只匹配 "haaa"
  • (ha)* 匹配例如 "hahahahaha"
  • (ha){3} 只匹配 "hahaha"

此外,就像*,+?,你可以分别添加?+不情愿和占有重复修饰符.

    System.out.println(
        "xxxxx".replaceAll("x{2,3}", "[x]")
    ); "[x][x]"

    System.out.println(
        "xxxxx".replaceAll("x{2,3}?", "[x]")
    ); "[x][x]x"
Run Code Online (Sandbox Code Playgroud)

基本上任何地方*都是"零或多"的重复元字符,您可以使用{...}重复构造.请注意,反之亦然:您可以在lookbehind中使用有限重复,但是您无法使用,*因为Java没有正式支持无限长度的lookbehind.

参考

相关问题


eld*_*his 19

^\w{14}$ 在Perl和任何Perl风格的正则表达式.

如果你想了解更多关于正则表达式的信息 - 或者只是需要一个方便的参考 - 正则表达式上的维基百科条目实际上非常好.