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

2022-08-31 14:18:06

我想知道是否有更好的方法来表示正则表达式中的修复重复量。例如,如果我只想匹配14个字母/数字,我正在使用哪个将匹配一个单词,而不是匹配,有没有一种方便的方法可以做到这一点?我目前在java中这样做,但我想这可能也适用于其他语言。提前致谢。^\w\w\w\w\w\w\w\w\w\w\w\w\w\w$UNL075BE499135UNL075BE499135AAA


答案 1

对于 Java:

量词文档

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


答案 2

有限重复语法用于代替星号/加号/问号。{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"

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

引用

相关问题