我需要Java Regex,它可以匹配用于设置SSL / TLS密码的参数
有效密码: (为了一次性测试多个模式,将它们添加到以逗号分隔的字符串中,稍后迭代每个模式匹配)
"ALL:!kRSA:!CBC,ALL:-aRSA:-CBC:SHA256,ALL:!kRSA,ALL:!aRSA,ALL:!RSA,ALL:!EDH-RSA-DES-CBC-SHA,ALL:!DES-CBC,ALL:!DES,ALL:-RSA+AES-128-CBC+SHA256";
可与regex = "^((?:ALL)|(?:ALL)(:([!-]?(a|k)?[A-Z0-9]+([+-]?(a|k)?[A-Z0-9]+)?)*)*)$";
但是当我尝试无效密码时:(基本上它应该无法匹配)
invalidciphers = "ALL:+DES,+DES,-DES,DEFAULT:-aRSA,akRSA,kDHE-aRSA,!ECDHE";
无法创建一个。
任何人都可以帮助我吗?
答案 0 :(得分:1)
您可以使用
^ALL(?::[!-]?[ak]?[A-Z0-9]+(?:[+-]?[ak]?[A-Z0-9]+)*)*(?:,ALL(?::[!-]?[ak]?[A-Z0-9]+(?:[+-]?[ak]?[A-Z0-9]+)*)*)*$
请参见regex demo
方案为^<single_pattern>(?:,<single_pattern>)*$
。它匹配字符串的开头,然后是单个模式,然后匹配0个或多个逗号,然后是单个模式,直到字符串结尾。
这里的single_pattern
是ALL(?::[!-]?[ak]?[A-Z0-9]+(?:[+-]?[ak]?[A-Z0-9]+)*)*
:
ALL
-子字符串(?::[!-]?[ak]?[A-Z0-9]+(?:[+-]?[ak]?[A-Z0-9]+)*)*
-出现0次或以上
:
-冒号[!-]?
-可选的!
或-
[ak]?
-可选的a
或k
[A-Z0-9]+
-1个以上大写字母或数字(?:[+-]?[ak]?[A-Z0-9]+)*
-0次或多次出现
[+-]?
-可选的+
或-
[ak]?
-可选的a
或k
[A-Z0-9]+
-1个以上大写字母或数字