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

时间:2010-07-16 02:44:51

标签: java regex

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

4 个答案:

答案 0 :(得分:59)

对于Java:

Quantifiers documentation

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

答案 1 :(得分:22)

有限重复语法使用{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

所有重复元字符具有相同的优先级,因此就像您可能需要对*+?进行分组一样,您也可以{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"

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

参考

相关问题

答案 2 :(得分:19)

Perl中的

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

如果你想了解更多关于正则表达式的信息 - 或者只是需要一个方便的参考 - Wikipedia Entry on Regular Expressions实际上非常好。

答案 3 :(得分:1)

在Java中,使用Pattern p = Pattern.compile("^\\w{14}$");创建模式以获取更多信息see the javadoc