Java 如何匹配像“quot;[$first-last.something.random.more:junk]”这句话的意思是;使用正则表达式

Java 如何匹配像“quot;[$first-last.something.random.more:junk]”这句话的意思是;使用正则表达式,java,regex,Java,Regex,我希望能够满足以下条件: [$first-last.something.random.more:junk] $first last必须是$first last或$cat dog(精确的字符串匹配) 。某些内容可以是a-z(上限或下限)范围内的任何值,包括-,但不能包含其他字符。可能有一个或多个链接值(.something.something.something) 更多:最后的垃圾。必须后跟a:后跟一个包含a-z(上限或下限)以及z的值 步骤1-3可以重复任意次数,以逗号分隔 步骤1-4必须用方

我希望能够满足以下条件:

[$first-last.something.random.more:junk]
  • $first last必须是$first last或$cat dog(精确的字符串匹配)
  • 。某些内容可以是a-z(上限或下限)范围内的任何值,包括-,但不能包含其他字符。可能有一个或多个链接值(.something.something.something)
  • 更多:最后的垃圾。必须后跟a:后跟一个包含a-z(上限或下限)以及z的值
  • 步骤1-3可以重复任意次数,以逗号分隔
  • 步骤1-4必须用方括号括起来[]
  • 步骤1-4可以重复,用方括号隔开[]
  • 示例:

    [$first-last.something.random.more:junk]                    [correct]
    [$first-last.some.more:junk, $first-last.more:values]       [correct]
    [$first-last.some.more:junk, $first-last.more:values]
    [$first-last.single.correct:type]                           [correct]
    
    [$blah-garbage.some.more:junk, $first-last.more:values]     [incorrect]
    [$first-last.some.more, $first-last.more:values]            [incorrect]
    
    到目前为止,我得到的是:

    ^\s*(\[\$[first\-last|cat\-dog]+(\.[a-zA-Z0-9---_]+)+\s*:\s*+[a-zA-Z0-9---_]+(?:,\s*\$[first\-last|cat\-dog]+(\.[a-zA-Z0-9---_]+)+\s*:\s*+[a-zA-Z0-9---_]+)\]\s*)\s*$
    
    这不适用于这种情况:

    [$first-last.some.more:junk, $first-last.more:values]
    [$first-last.single.correct:type]
    

    它在Java中也无法工作。没有错误,它只是说无法找到匹配项,即使它是有效的,并且可以在以下网站上找到匹配项:

    尝试以下正则表达式:

    \[(?:\$first-last|cat-dog)(?:\.[\w-]+)+[\w-]+:[\w-]+(?:,\s*(?:\$first-last|cat-dog)(?:\.[\w-]+)+[\w-]+:[\w-]+)*\]
    

    请参见尝试以下正则表达式:

    \[(?:\$first-last|cat-dog)(?:\.[\w-]+)+[\w-]+:[\w-]+(?:,\s*(?:\$first-last|cat-dog)(?:\.[\w-]+)+[\w-]+:[\w-]+)*\]