限制一个字符在整个正则表达式字符串中的出现

limiting the occurence of one character across a whole regex string

我想要一个长度在 3 到 50 个字符之间的字母数字(不是单词)字符串。它不能有超过 3 个空格。我想出的最好的是: ^[a-zA-Z0-9]{3,50}[\s]{0,3}$ 但这不起作用。
有人可以给我指出正确的方向吗?

Cary Swoveland has suggested 一样,您可以使用负先行来确保字符串的空白字符不超过 3 个。完整的模式应该是这样的:

^(?!(?:.*\h){4})[A-Za-z0-9\h]{3,50}$

Demo.

请注意,我在这里使用 \h 而不是 \s 是为了只匹配水平空白字符。

如果您需要防止空白字符出现在字符串的 beginning/end 处,您可以调整 Lookahead 并在末尾添加负 Lookbehind:

^(?!\h|(?:.*\h){4})[A-Za-z0-9\h]{3,50}(?<!\h)$

Demo.