我有一个正则表达式
^[a-zA-Z+#-.0-9]{1,5}$
验证该单词包含字母数字字符,少数特殊字符和长度不得超过5
个字符。
如何使这个正则表达式最多接受与上述正则表达式匹配的五个单词。
答案 0 :(得分:2)
^[a-zA-Z+#\-.0-9]{1,5}(\s[a-zA-Z+#\-.0-9]{1,5}){0,4}$
此外,如果您只想接受空格,而不是制表符和换行符,则可以使用[ ]
代替\s
。您可以为任意数量的空格(或空格)编写[ ]+
(或\s+
),而不只是一个。
修改:删除了无效的解决方案并修复了unicornaddict提到的错误。
答案 1 :(得分:2)
我相信这可能是你正在寻找的。它强制至少一个你想要的模式的单词,然后是0到4个相同的单词,每个单词前面都有一个或多个空白字符:
^XX(\s+XX){0,4}$
其中XX
是您实际的单字正则表达式。
它分为两个不同的部分,因此您不需要在字符串的末尾添加空格。
答案 2 :(得分:1)
你的正则表达式有一个小bug。它匹配字母,数字,+
,#
,period
但不匹配hyphen
以及#
和period
之间的所有字符。这是因为在两侧包围的char类中的hyphen
充当范围元字符。为避免这种情况,您必须逃避hyphen
:
^[a-zA-Z+#\-.0-9]{1,5}$
或者把它放在char类的beg / end,以便对它进行字面处理:
^[-a-zA-Z+#-.0-9]{1,5}$
^[a-zA-Z+#.0-9-]{1,5}$
现在要匹配最多5个这样的单词,您可以使用:
^(?:[a-zA-Z+#\-.0-9]{1,5}\s+){1,5}$
编辑:此解决方案严重限制只匹配那些以空格结尾的输入!要克服这个限制,你可以看到雅各布的答案。