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。
我正在尝试编写一个匹配以下所有模式示例的正则表达式 -
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。