Java正则表达式问题,带有:###tag1@@@value1###tag2@@@value2##tag3@@@value3###

Java正则表达式问题,带有:###tag1@@@value1###tag2@@@value2##tag3@@@value3###,java,regex,Java,Regex,我在编写正则表达式以验证以下模式时遇到问题: ###tag1@@@value1###tag2@@@value2###tag3@@@value3### 这可能会无限期地重复 标记和值可以包含任何可打印的字符以及空格和换行符 我一直在尝试这种变化: String pattern = "(###[\\p{Print}\\s]+@@@[\\p{Print}\\s]+)+###" 但对于某些情况,例如: ###testTag@@@testValue###testtag2testvalue2###

我在编写正则表达式以验证以下模式时遇到问题:

###tag1@@@value1###tag2@@@value2###tag3@@@value3###
  • 这可能会无限期地重复
  • 标记和值可以包含任何可打印的字符以及空格和换行符
我一直在尝试这种变化:

String pattern = "(###[\\p{Print}\\s]+@@@[\\p{Print}\\s]+)+###"
但对于某些情况,例如:

###testTag@@@testValue###testtag2testvalue2### (missing the @@@ for tag2/value2)
并使一些有效输入无效,例如:

###component@@@CORE COMMAND GROUP###severity@@@DEBUG###message@@@Validating potential model load directory: C:/some/dir/market-xxxxxx/market-xxxxxx-PRODUCT-kit/data/XXX_7020190724201513_0X###
关于如何改进这个正则表达式有什么建议吗?谢谢

我正在使用Java模式库。

您可以使用这个正则表达式“

  • \P{C}
    匹配任何可打印的unicode字符
  • (?:(?!@@@124####;)\\P{C}
    匹配任何可打印的unicode字符,如果它后面没有紧跟
    ##
    @@

    • 这几乎可以让你达到目的:

      (###)((.+?)(@@@)(.+?)(###))
      

      我只是很难弄明白为什么:

      (###)((.+?)(@@@)(.+?)(###))+
      
      无法使其按预期运行:-/

      此功能运行良好:

      String s1=“###tag1@@@value1###tag2@@@value2###tag3@@@value3#;
      String s2=“testTag@@@testValue###testtag2testvalue2###”;
      String s3=“component@@@CORE命令组#####严重性@@@DEBUG#####message@@验证潜在模型加载目录:C:/some/dir/market-xxxxxx/market-xxxxxx-PRODUCT-kit/data/xxx7020190724201513(u0x##”;
      字符串p=“(###| ^”)(((\p{C})+?@@@@(\p{C})+?)##|$)+?”;
      Matcher m1=p.Matcher(s1);//testTag@@@testValue
      Matcher m2=p.Matcher(s2);//tag1@@@value1,tag2@@@value2,tag3@@@value3
      Matcher m3=p.Matcher(s3);//组件@@@CORE命令组,严重性@@@DEBUG
      
      你想在这里做什么?你想提取数据的哪一部分?可以
      ###
      @@@
      成为标记或值的一部分?那么
      testtag2testvalue2
      会被视为标记或值吗?任意缺少
      @@
      不是regex会自动为你分割的东西…@anubhava否我们的期望是@@@和####是分隔符,而不是标记或值的一部分。否则将无法强制执行。但是,###@和@可以。您确定您希望打印的所有字符确实都可以打印吗?这不起作用,但我认为您的思路是正确的。它需要看到一个#或@并理解这一点我没有注意到开始和结束<代码>代码>的开始和结束<代码>35周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五周五除了除了除了除了除了早些时候的格式问题。它是工作的。它正在工作。工作。工作。工作。工作。工作。工作。工作。工作。工作。我打算添加更多的测试用例,以确保它的一部分是@@@@@@@@@@@@@@或部分的一部分的一部分的部分的部分的部分的部分的部分的部分的部分的部分的部分的部分的@@@@@@@@@@@或者或者其他的部分的部分的部分的部分的部分的部分的部分的部分的部分的部分的@@或者其他的部分的部分的部分的部分的部分的部分的@@@或者或者或者或者。或者其他其他的部分的部分的部分的部分的部分的部分的部分的部分的部分的部分的部分的部分的部分的@。。。。。。。。。。35;)\\P{C}|\\s)+)+###$“是不是因为它在寻找####标记@@@value###重复了?所以####tag@@@value###tag2@@@value2####会失败,因为它需要###tag@@@value###tag2@@@value2##(注意两对之间的6)
      (###)((.+?)(@@@)(.+?)(###))+