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

euoag5mw  于 2022-12-24  发布在  其他
关注(0)|答案(4)|浏览(181)

有没有更好的方法来表示正则表达式中固定数量的重复?
例如,如果我只想精确匹配14个字母/数字,我使用^\w\w\w\w\w\w\w\w\w\w\w\w\w\w$,它将匹配像UNL075BE499135这样的单词,而不匹配UNL075BE499135AAA。有没有方便的方法来做到这一点?我目前正在Java中做这一点,但我猜这可能也适用于其他语言。

xienkqul

xienkqul1#

对于Java:
Quantifiers documentation
X,正好n次:X{n}
X,至少n次:X{n,}
X,至少n次但不超过m次:X{n,m}

cigdeys3

cigdeys32#

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

基本上,只要*是"zero-or-more"的重复元字符,就可以使用{...}重复构造。注意,反过来就不对了:可以在lookbehind中使用有限重复,但不能使用*,因为Java不正式支持无限长lookbehind。

参考文献

相关问题

zpgglvta

zpgglvta3#

^\w{14}$以及任何Perl风格的正则表达式。
如果你想学习更多关于正则表达式的知识--或者只是需要一个方便的参考资料--Wikipedia Entry on Regular Expressions实际上是相当不错的。

3df52oht

3df52oht4#

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

相关问题