我需要使用 regex 验证输入。 要求是匹配元组 (a,b,c) 或超过 3 个 (a,b,c,d,) 形式的字符串,但空格可以出现在字符串边界之前/之后 如下所示:
test
test,t1
t1 , t2
a
a,b
我带着这个正则表达式来了:
\s*(\w+\s*,\s*)*\s*\w+\s*
匹配工作正常,但它具有 多项式复杂性 攻击字符串 ' '.repeat(1651) + ' '.repeat(1651) + ',0'
任何使其安全/线性的建议。尝试了前瞻方法和惰性量词但无法正确使用?
谢谢..
这似乎是最简单的解决方案:
(\s*\w+\s*,?)*
模式是:任何空格,后跟一个或多个单词,后跟任何空格,后跟一个或零个逗号。该模式可能出现 0 次或多次。
那个网站说这是线性和安全的。
然而,这并没有真正验证任何东西,只是匹配可能用逗号分隔的单词组,就像您提供的正则表达式一样。
如果您需要其他内容,则需要更具描述性。