我有一个正则表达式
^[a-zA-Z+#-.0-9]{1,5}$
其验证该词包含字母数字字符和少量特殊字符,并且长度不应超过5个字符。我如何使这个正则表达式接受最多五个与上述正则表达式匹配的单词。
5
sh7euo9m1#
第一个月同样,如果你只想接受空格,而不是制表符和换行符,你可以用[ ]代替\s,你可以用[ ]+(或\s+)来表示任意数量的空格(或空白),而不仅仅是一个。
[ ]
\s
[ ]+
\s+
**编辑:**删除了无效的解决方案,并修复了unicornaddict提到的bug。
g6baxovj2#
我相信这可能就是你要找的,它强制输入至少一个你想要的模式的单词,然后是0到4个相同的单词,每个单词前面都有一个或多个空格字符:
^XX(\s+XX){0,4}$
其中XX是实际的一个单词正则表达式。它被分成两个不同的部分,这样你就不需要在字符串的末尾有空格。如果你想 allow 这样的空格,只需在那一点上添加\s*。例如,在开始和结尾都允许空格将是:
XX
\s*
^\s*XX(\s+XX){0,4}\s*$
fhg3lkii3#
你的正则表达式有一个小错误。它匹配字母,数字,+,#,period,但不匹配hyphen,也匹配#和period之间的所有字符。这是因为字符类中的hyphen当被两边包围时会充当范围 meta字符。为了避免这个问题,你必须转义hyphen:
+
#
period
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}$
**编辑:**这个解决方案有一个严重的限制,即只匹配那些以白色结尾的输入!!!要克服这个限制,您可以查看Jakob的ans。
3条答案
按热度按时间sh7euo9m1#
第一个月
同样,如果你只想接受空格,而不是制表符和换行符,你可以用
[ ]
代替\s
,你可以用[ ]+
(或\s+
)来表示任意数量的空格(或空白),而不仅仅是一个。**编辑:**删除了无效的解决方案,并修复了unicornaddict提到的bug。
g6baxovj2#
我相信这可能就是你要找的,它强制输入至少一个你想要的模式的单词,然后是0到4个相同的单词,每个单词前面都有一个或多个空格字符:
其中
XX
是实际的一个单词正则表达式。它被分成两个不同的部分,这样你就不需要在字符串的末尾有空格。如果你想 allow 这样的空格,只需在那一点上添加
\s*
。例如,在开始和结尾都允许空格将是:fhg3lkii3#
你的正则表达式有一个小错误。它匹配字母,数字,
+
,#
,period
,但不匹配hyphen
,也匹配#
和period
之间的所有字符。这是因为字符类中的hyphen
当被两边包围时会充当范围 meta字符。为了避免这个问题,你必须转义hyphen
:或者把它放在char类的beg/end,这样就可以按字面意思处理它:
现在,要匹配最多5个这样的单词,您可以用途:
**编辑:**这个解决方案有一个严重的限制,即只匹配那些以白色结尾的输入!!!要克服这个限制,您可以查看Jakob的ans。