Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带内部表达式的花括号之间的表达式_Java_Regex - Fatal编程技术网

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+(?:{.*?}(?=[^}]*$|;[^}]*;:)))