我有一个使用regex验证输入的要求。要求是以元组(a,B,c)或多于3个元组(a,b,c,d)的形式匹配字符串,白色可以出现在字符串边界之前/之后,如下所示:
test
test,t1
t1 , t2
a
a,b
我用这个正则表达式:
\s*(\w+\s*,\s*)*\s*\w+\s*
匹配工作正常,但攻击字符串'\t'. repeat(1651)+ '\t'. repeat(1651)+ ',0'有polynomial complexity
有什么建议可以使它安全/线性。尝试了前瞻方法和懒惰的量词,但不能得到正确的?
谢谢
1条答案
按热度按时间mlnl4t2r1#
这似乎是最简单的解决方案:
模式为:任何空格,后跟一个或多个单词,后跟任何空格,后跟一个或零个逗号。该模式可以出现0次或多次。
那个网站说这是线性的,安全的。
这将做与您提供的正则表达式相同的事情,除了它允许尾随逗号并且还匹配空字符串。
如果这还不能满足您的需要,那么请提供更详细的描述和更多的示例,说明什么应该通过或失败的验证。