我想知道是否有更好的方法来表示正则表达式中的重复数量。例如,如果我只想匹配14个字母/数字,我使用^\w\w\w\w\w\w\w\w\w\w\w\w\w\w$
来匹配UNL075BE499135
之类的字词而不匹配UNL075BE499135AAA
有没有方便的方法呢?我现在正在java中这样做,但我想这可能也适用于其他语言。提前谢谢。
答案 0 :(得分:59)
答案 1 :(得分:22)
有限重复语法使用{m,n}
代替星号/加号/问号。
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)
^\w{14}$
和任何Perl风格的正则表达式。
如果你想了解更多关于正则表达式的信息 - 或者只是需要一个方便的参考 - Wikipedia Entry on Regular Expressions实际上非常好。
答案 3 :(得分:1)
在Java中,使用Pattern p = Pattern.compile("^\\w{14}$");
创建模式以获取更多信息see the javadoc