花括号之间的正则表达式,但忽略嵌套

时间:2019-12-03 13:48:24

标签: java regex

我正在寻找一个正则表达式,该表达式在花括号之间找到字符串,但忽略嵌套(如果有)。例如,下一个字符串:

  

重置调查888 $ {d14322a2-bc13-4fcb-9da3- {sdfdsf} e2346a7d58ec}   参与者$ {c45e9bc0-6043-4aa1-8de0-27f8f8aade82}

只能匹配以下两个:

  1. d14322a2-bc13-4fcb-9da3- {sdfdsf} e2346a7d58ec
  2. c45e9bc0-6043-4aa1-8de0-27f8f8aade82

基于答案,我将添加另一个示例:

  

{@ aaa位置}
  {@eee标头}
  {@bbb {http://www.uytuty.org/879/fghdhgfd} hgjdg}
  {@gfh fdgdf gd dfgfdg。}

它应该匹配:

  1. @aaa位置
  2. @eee标头
  3. @bbb {http://www.uytuty.org/879/fghdhgfd} hgjdg
  4. @gfh fdgdf gd dfgfdg。

2 个答案:

答案 0 :(得分:1)

这是递归工作。

如果您的正则表达式支持,则可以使用:

(?<={)([^{}]++|\{(?1)\})+(?=})

Demo & explanation

答案 1 :(得分:0)

(?!\{)[\w\-\{\}]+(?=\})

让我们分解一下:

  • (?!abc)-负面展望。匹配的字符串不包括在内 结果。
  • (?=abc)-积极向前看。匹配的字符串是 从结果中排除。
  • [\w\-\{\}]+-任何字母数字字符 (包括下划线)和花括号。

经过https://regexr.com/4q128

测试
相关问题