在正则表达式中设置最小和最大字符?
我写了一个正则表达式 ,它匹配任意数量的字母,字母之间有任意数量的单个空格。 我希望这个正则表达式也强制执行最小和最大数量的字符,但我不知道该怎么做(或者如果可能的话)。
我的正则表达式是:
[A-Za-z](\s?[A-Za-z])+
我意识到它只是围绕一个空格匹配两组字母,所以我稍微修改它来修复它。 最初的问题仍然是相同的。
有没有办法强制执行至少三个字符,最多30个字符?
是
就像+
意味着一个或多个你可以使用{3,30}
来匹配3到30之间
例如, [az]{3,30}
匹配3到30个小写字母
从Pattern类的文档
X{n,m} X, at least n but not more than m times
在您的情况下,匹配3-30个字母后跟空格可以通过以下方式完成:
([a-zA-Z]\s){3,30}
如果你需要尾随空格,如果你不需要,你可以使用:(2-29次字母+空格,然后字母)
([a-zA-Z]\s){2,29}[a-zA-Z]
如果你想要将空格数作为字符,你需要将该数字除以2得到
([a-zA-Z]\s){1,14}[a-zA-Z]
你可以添加\s?
如果尾随空格是可选的,则返回最后一个。 这些都在RegexPlanet上进行了测试
如果您希望整个字符串总共在3到30个字符之间,您可以在RegExp的开头使用前瞻添加(?=^.{3,30}$)
并删除其他大小限制
所有这一切,老实说,我可能只是测试String
的.length
属性。 它更具可读性。
这就是你要找的
^[a-zA-Z](\s?[a-zA-Z]){2,29}$
^
是字符串的开头
$
是字符串的结尾
(\s?[a-zA-Z]){2,29}
将匹配(\ s?[a-zA-Z])2到29次..
实际上, 本杰明的答案将导致完整解决OP的问题。 使用前瞻可以限制字符总数并将匹配限制为设置的字母组合和(可选)单个空格。
解决整个问题的正则表达式将成为
(?=^.{3,30}$)^([A-Za-z][\s]?)+$
这将匹配AAA
, AA
并且也无法匹配AA A
因为有两个连续的空格。 我在http://regexpal.com/测试了这个,它就可以了。
你应该使用
[a-zA-Z ]{20}
[允许的字符] {限制字符数}