Java 带内部表达式的花括号之间的表达式
我有一个示例表达式:Java 带内部表达式的花括号之间的表达式,java,regex,Java,Regex,我有一个示例表达式: firstName =:'Mon';lastName =:'Arthur';:or{size >:'20';lastName ^:'H';:and{company |:'lon';:or{company |:'we'}}};lastName =:'aa';:and{length >:'33';:or{color =:'red'};width <:'2'};date <:'2012';:!{source =:'dictionary,locale'}
firstName =:'Mon';lastName =:'Arthur';:or{size >:'20';lastName ^:'H';:and{company |:'lon';:or{company |:'we'}}};lastName =:'aa';:and{length >:'33';:or{color =:'red'};width <:'2'};date <:'2012';:!{source =:'dictionary,locale'}
firstName=:'Mon';lastName=:“亚瑟”;:或{size>:'20';lastName^:'H';和{company |:'lon';或{company |:'we'}};lastName=:'aa';:和{length>:'33';或{color=:'red'};宽度:'33';或{color=:'red'};宽度:'20';姓氏:'H';和{company |:'lon';或{company |:'we'}-好的
:和{length>:'33';:或{color=:'red'}-缺少;宽度请尝试此正则表达式
(:or{.*?\};{1,})|(:and{.*\};)|(:!{.*?\};{0,})
我不能保证任何其他复杂的情况,但它肯定是您提到的输出,除了额外的“;”
"firstName =:'Mon';lastName =:'Arthur';:or{size >:'20';lastName ^:'H';:and{company |:'lon';:or{company |:'we'}}};lastName =:'aa';:and{length >:'33';:or{color =:'red'};:width <:'2'};date <:'2012';:!{source =:'dictionary,locale'}".match(/(:or{.*?\};{1,})|(:and{.*\};)|(:!{.*?\};{0,})/g)
“代码”><代码>“第一名名名=:,,,,<代码><<代码>,,,,,,,,,,,,,,,,,,,,,,,,,{公司公司公司::::,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,:以及::::{公司公司公司公司公司公司公司:::::::::::::::::::::::::,,,,,,,,,,,,,,,,,,,,:或者:::::::::::::::::::,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,姓名:'20';姓氏:'H';和{公司:'lon';或{公司|:'we'}};“,
“:和{length>:'33';:或{color=:'red'};:width我试图找出一个适合您的示例和您编写的要求的解决方案,但我不确定是否完全得到了:
(?:;:)(\S+(?:{.*?}(?=[^}]*$|;[^}]*;:)))
这将使用正向前瞻来确保正确捕捉最后一个结束括号(它后面必须紧跟字符串的结尾或另一个;:
)
如果可能的话,您的匹配是字符串的开头,因此不按;:
进行。您可以将(?:;:)
部分更改为(?:^;;:)
这里是Regex101的链接:你想用regex做的事情是不可能的。你的语言是什么?也许可以试试:(\S+(?:{.*}(?=$|;[^}]*:))
@SebastianProske是的:)@SebastianProske。请添加你的评论作为答案。这真的很棒。
[
":or{size >:'20';lastName ^:'H';:and{company |:'lon';:or{company |:'we'}}};",
":and{length >:'33';:or{color =:'red'};:width <:'2'};",
":!{source =:'dictionary,locale'}"
]
(?:;:)(\S+(?:{.*?}(?=[^}]*$|;[^}]*;:)))