Java 用于密码套件匹配的正则表达式

Java 用于密码套件匹配的正则表达式,java,regex,Java,Regex,我需要用java设计一个正则表达式来匹配JavaEE服务器上配置的密码套件列表,例如 TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA256, -TLS_ECDH_RSA_WITH_RC4_128_SHA, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA256 这些要求是: 匹配所有密码套件包含中间的RC4或MD5字,如 TLSsECDHEYEXSAX,RC4Y128SH256< /

我需要用java设计一个正则表达式来匹配JavaEE服务器上配置的密码套件列表,例如

TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA256, -TLS_ECDH_RSA_WITH_RC4_128_SHA, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA256
这些要求是:

  • 匹配所有密码套件包含中间的RC4或MD5字,如<代码> TLSsECDHEYEXSAX,RC4Y128SH256< /COD> < /LI>
  • 匹配所有结尾包含单词SHA的密码套件,例如,TLS\u ECDHE\u ECDSA\u与\u 3DES\u EDE\u CBC\u SHA
  • 不包括以减号“-”开头的密码套件
  • 因此,正则表达式应仅与以下内容匹配:
    TLS_ECDHE_RSA_与_3DES_EDE_CBC_SHA
    (以SHA结尾)
    TLS\u ECDHE\u ECDSA\u带RC4\u 128\u SHA256
    (中间带RC4)

    -TLS\u ECDH\u RSA\u和\u RC4\u 128\u SHA
    不应包括在内,因为它以“-”开头

    我尝试了以下方法:

    (?<!-)\b([a-zA-Z0-9_]+)\b(?<=RC4|MD5|SHA)
    
    (?
    

    最后匹配<代码> SHA/代码>,但在<>代码> RC4和 MD5中间不适用。


    您能帮我演示如何创建这样的正则表达式吗?提前感谢您的帮助。

    一个选项是使用
    \w
    匹配单词字符

    (?<!-)\b(?:\w+(?:RC4|MD5)\w+|\w+SHA)\b
    

    非常感谢@TheFirst bird。这很有帮助。Regex有许多工作原理稍有不同的实现。它是哪种编程语言/Regex方言?尝试或类似,并分享您的示例。Java是编程语言。regex101.com是我最喜欢的测试Regex的网站,但是,我对Regex的了解有限,因此我需要了解更多。
    (?<!-)\b(?:(?:[^\W_]+_)+(?:RC4|MD5)(?:_[^\W_]+)+|(?:[^\W_]+_)+SHA)\b