如何限制此正则表达式中正则表达式的长度?

时间:2016-06-25 19:13:33

标签: java regex

我是Regex的新手。我必须创建一个正则表达式来验证邮政编码。我有一个正则表达式:^[a-zA-Z0-9]+([ ][a-zA-Z0-9]+)?$。这个正则表达式接受所有字母和数字以及字符之间的一个空格。这个正则表达式部分适用于我,但我需要另外检查这个,以便我可以将字符长度限制为6.

我从How to match a single Space得到了这个正则表达式。现在我想限制这个正则表达式的字符长度。就像是 ^[a-zA-Z0-9]+([ ][a-zA-Z0-9]+)?{6}$这会将长度限制为六(6)

我尝试了很多方法但失败了。我没有太多时间深入研究正则表达式的细节。任何人都可以为我提供解决方案。

2 个答案:

答案 0 :(得分:4)

您可以在正则表达式前面使用零宽度正面预测 (?=X),如下所示:

^(?=.{0,6}$)[a-zA-Z0-9]+([ ][a-zA-Z0-9]+)?$

请注意,X{6}表示完全 6次X。要指定最大长度,上述正则表达式使用带有X{min,max}点的X表单。我们还在前瞻的末尾包含$,从而指定在前6个字符后不允许进一步的内容。正则表达式的其余部分指定哪些字符可以按什么顺序出现。 (那部分我没有改变。)

你可以在这里找到一个有用的正则表达式备忘单:
https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

这里有一个关于外观表达的深入解释:
http://www.regular-expressions.info/lookaround.html

答案 1 :(得分:1)

听起来您希望在印度验证6位数的邮政编码。如果是这样,规则还要求第一个字符不是零。

^[1-9][0-9]{5}$

Regular expression visualization

如果您希望匹配的邮政编码看起来像包含A-Z或带有空格后跟6个字符的数字字符,那么您可以使用。

^[a-zA-Z0-9]+ [a-zA-Z0-9]{6}$

Regular expression visualization