Java if-then-else 结构的正则表达式

Java regular expression for if-then-else constructs

我正在尝试编写一个匹配以下所有模式示例的正则表达式 -

1) Name=John,Age=25
2) {Name=John,Age=25}
3) Name=John

基本上,两个单词或数字之间必须有一个等号,后跟一个逗号 (,),然后重复该模式。该模式不能以除字母、数字或花括号之外的任何特殊字符结尾。花括号是可选的,如果在模式的开头使用花括号,那么也应该有一个右花括号,反之亦然,因此以下模式不应匹配 -

1) Name=John!Age=25
2) {Name=John,Age=25
3) Name=John,Age=25}
4) Name=John,
5) Name=John=Age,25!

我正在尝试使用环视来试验以下正则表达式,但带有花括号的模式根本不匹配 -

^(?:(?<=\{)(?=\})|(?<!\{)(?!\}))(?:\w+=\w+,)*\w+=\w+}?$

我在这里做错了什么,因为花括号的模式根本不匹配?

这个怎么样?

\w+=\w+(?:,\w+=\w+)*|\{\w+=\w+(?:,\w+=\w+)*\}

看看你的正则表达式,我认为这不是先行或后行的工作方式。因为它在比赛中向前看或向后看。 这在这篇文章https://javascript.info/regexp-lookahead-lookbehind.

中解释得很好

有了它,我设法创建了一个可与前瞻和后视一起使用的模式。

((?<=\{)(\w+=\w+,?)+(?<!,)(?=\}))|^(\w+=\w+,?)+(?<!,)$

在这里你可以看到 lookahead 试图在匹配组 (\w+=\w+,?)+(?<!,) 的后面和之后找到 {。 (?<!,) 只是为了防止最后出现逗号。

在此处检查正则表达式 https://regexr.com/6idl8