如何使用Regex匹配像“[$ first-last.something.random.more:junk]”这样的字符串

时间:2017-06-27 06:01:49

标签: java regex

我希望能够匹配以下内容:

[$first-last.something.random.more:junk]
  1. $ first-last必须是$ first-last或$ cat-dog(精确字符串匹配)
  2. .something可以是a-z(上部或下部)的任何值,包括_-但不包括其他字符。可能有一个或多个链式值(.something.something.something)
  3. 更多:垃圾最后一次。必须后跟a:后跟一个包含a-z(上部或下部)以及_-
  4. 的值
  5. 步骤1-3可重复任意次数,以逗号分隔
  6. 步骤1-4必须括在方括号[]
  7. 步骤1-4可以重复,用方括号[]
  8. 分隔

    示例:

    [$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中工作。没有错误,它只是说找不到匹配,即使它有效并且可以在以下网站上找到匹配项:https://regex101.com/

1 个答案:

答案 0 :(得分:2)

尝试以下正则表达式:

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

请参阅here