Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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_Token_Delimiter - Fatal编程技术网

Java 基于这个或那个的正则表达式

Java 基于这个或那个的正则表达式,java,regex,token,delimiter,Java,Regex,Token,Delimiter,我正在尝试分析以下内容: "#SenderCompID=something\n" + "TargetCompID=something1" 放入一个数组中: {"#SenderCompID=something", "TargetCompId", "something1"} 使用: String regex = "(?m)" + "(" + "(#.*) |" + //single line of (?m)((#.*)|([^=]+=(.+))

我正在尝试分析以下内容:

"#SenderCompID=something\n" +
"TargetCompID=something1"
放入一个数组中:

{"#SenderCompID=something", "TargetCompId", "something1"}
使用:

String regex = "(?m)" + "(" +     
    "(#.*) |" +                //single line of (?m)((#.*)|([^=]+=(.+))
    "([^=]+)=(.+) + ")";
String toMatch = "#SenderCompID=something\n" +
    "TargetCompID=something1";
输出:

#SenderCompID=something
null
#SenderCompID
something
                       //why is there any empty line here?
TargetCompID=something1
null
                       //why is there an empty line here?
TargetCompID
something1
我明白我做错了什么。第一组返回整行,第二组返回(#.*)如果行以#开头,否则为null,第三组返回([^=]+=(.+)。我正试图做的是|。我想根据第二组的条件对其进行分析

(#.*)
([^=]+)=(.+).
或第三组

(#.*)
([^=]+)=(.+).
怎么做


编辑:编写错误的示例代码

您可以使用此正则表达式获取所有3个组:

(?m)^(#.*)|^([^=]+)=(.*)

正则表达式分解:

  • (?m)
    :启用
    多行模式
  • ^(#.*)
    :在组1中匹配以
    #
    开头的整行
  • |
    :或
  • ^([^=]+)=
    :匹配到
    =
    ,并在第2组中捕获,后跟
    =
  • (.*)
    :匹配第3组中的其余行

您在问题中提到了管道字符,但没有解释您遇到的问题。您在RegEx演示中的回答是正确的,但不是您在此处发布的内容。谢谢!您能解释一下(?:)expression正在这里执行。我阅读了一些内容,我收集到的信息是,以后捕获的内容不会被存储,但您使用此信息包装了整行内容,因此整行内容不会被捕获?您是否收到最近的评论?
(?:…)
称为非捕获组。感谢您的帮助。