Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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_Regex Lookarounds - Fatal编程技术网

Java正则表达式-条件分组

Java正则表达式-条件分组,java,regex,regex-lookarounds,Java,Regex,Regex Lookarounds,我需要分两组分析以下行: 第一组:ADJ-1-37-10 第2组:3.00(如果没有SPANLOSSMARGIN标记,则应为空) 到目前为止,我使用了(ADJ-\d{1,3}-\d{1,3}-\d{1,3}):*?SPANLOSSMARGIN=(\d{1,2}.\d{1,2})来解析以下行。但是它与ADJ-1-37-16不匹配,因为该行不包含SPANLOSSMARGIN标记。我的要求是在有ADJ-X-XX-XX标记时(无论是否存在其他标记)然后第1组应该返回它,当有SPANLOSSMARGIN标

我需要分两组分析以下行:
第一组:ADJ-1-37-10
第2组:3.00(如果没有SPANLOSSMARGIN标记,则应为空) 到目前为止,我使用了
(ADJ-\d{1,3}-\d{1,3}-\d{1,3}):*?SPANLOSSMARGIN=(\d{1,2}.\d{1,2})
来解析以下行。但是它与ADJ-1-37-16不匹配,因为该行不包含SPANLOSSMARGIN标记。我的要求是在有ADJ-X-XX-XX标记时(无论是否存在其他标记)然后第1组应该返回它,当有SPANLOSSMARGIN标记时,第2组应该返回它;但是只有当没有SPANLOSSMARGIN标记时,第2组才应该返回空的。我如何实现这一点

"ADJ-1-2-5::FIBERTYPE=NDSF,OSCSPANLOSS=16.00,TARGSPANLOSS=16.00,MINSPANLOSS=0.00,SPANLOSSMARGIN=3.00" "ADJ-1-13-5::FIBERTYPE=NDSF,OSCSPANLOSS=16.00,TARGSPANLOSS=16.00,MINSPANLOSS=0.00,SPANLOSSMARGIN=3.00" ; "ADJ-1-37-2::FIBERTYPE=UNKNOWN,TARGSPANLOSS=0.00,MINSPANLOSS=0.00,SPANLOSSMARGIN=3.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\"\",LINEIN=\"\",LINEOUT=\"\",CRSIN=\"\",CRSOUT=\"\"" "ADJ-1-37-4::FIBERTYPE=UNKNOWN,TARGSPANLOSS=0.00,MINSPANLOSS=0.00,SPANLOSSMARGIN=3.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\"\",LINEIN=\"\",LINEOUT=\"\",CRSIN=\"\",CRSOUT=\"\"" "ADJ-1-37-8::FIBERTYPE=UNKNOWN,TARGSPANLOSS=0.00,MINSPANLOSS=0.00,SPANLOSSMARGIN=3.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\"\",LINEIN=\"\",LINEOUT=\"\",CRSIN=\"\",CRSOUT=\"\"" "ADJ-1-37-10::FIBERTYPE=UNKNOWN,TARGSPANLOSS=0.00,MINSPANLOSS=0.00,SPANLOSSMARGIN=3.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\"\",LINEIN=\"\",LINEOUT=\"\",CRSIN=\"\",CRSOUT=\"\"" "ADJ-1-37-14::FIBERTYPE=UNKNOWN,TARGSPANLOSS=0.00,MINSPANLOSS=0.00,SPANLOSSMARGIN=3.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\"\",LINEIN=\"\",LINEOUT=\"\",CRSIN=\"\",CRSOUT=\"\"" "ADJ-1-37-16::FIBERTYPE=UNKNOWN,TARGSPANLOSS=0.00,MINSPANLOSS=0.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\"\",LINEIN=\"\",LINEOUT=\"\",CRSIN=\"\",CRSOUT=\"\"" "ADJ-1-37-20::FIBERTYPE=UNKNOWN,TARGSPANLOSS=0.00,MINSPANLOSS=0.00,SPANLOSSMARGIN=3.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\"\",LINEIN=\"\",LINEOUT=\"\",CRSIN=\"\",CRSOUT=\"\"" "ADJ-1-37-22::FIBERTYPE=UNKNOWN,TARGSPANLOSS=0.00,MINSPANLOSS=0.00,SPANLOSSMARGIN=3.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\"\",LINEIN=\"\",LINEOUT=\"\",CRSIN=\"\",CRSOUT=\"\"" ADJ-1-2-5::光纤类型=NDSF,OSCSPANLOSS=16.00,目标SPANLOSS=16.00,最小SPANLOSS=0.00,最小SPANLOSS=3.00 ADJ-1-13-5::光纤类型=NDSF,OSCSPANLOSS=16.00,目标SPANLOSS=16.00,最小SPANLOSS=0.00,最小SPANLOSS=3.00 ; “ADJ-1-37-2::FIBERTYPE=UNKNOWN,TargetSpanLoss=0.00,MinSpanLossMargin=0.00,SPANLOSSMARGIN=3.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\”\,LINEIN=\“\”,LINEOUT=\“\”,CRSIN=\“\”,CRSOUT=\“\” “ADJ-1-37-4::FIBERTYPE=UNKNOWN,TargetSpanLoss=0.00,MinSpanLossMargin=0.00,SPANLOSSMARGIN=3.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\”\,LINEIN=\“\”,LINEOUT=\“\”,CrIn=\“\”,CrOut=\“\” “ADJ-1-37-8::FIBERTYPE=UNKNOWN,TargetSpanLoss=0.00,MinSpanLossMargin=0.00,SPANLOSSMARGIN=3.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\”\,LINEIN=\“\”,LINEOUT=\“\”,CrIn=\“\”,CrOut=\“\” “ADJ-1-37-10::FIBERTYPE=UNKNOWN,TargetSpanLoss=0.00,MinSpanLossMargin=0.00,SPANLOSSMARGIN=3.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\“\”,LINEIN=\“\”,LINEOUT=\“\”,CrIn=\“\”,CrOut=\“\” “ADJ-1-37-14::FIBERTYPE=UNKNOWN,TargetSpanLoss=0.00,MinSpanLossMargin=0.00,SPANLOSSMARGIN=3.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\”\,LINEIN=\“\”,LINEOUT=\“\”,CrIn=\“\”,CrOut=\“\” “ADJ-1-37-16::FIBERTYPE=UNKNOWN,TargetSpanLoss=0.00,MinSpanLossSource=0.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\“\”,LINEIN=\“\”,LINEOUT=\“\”,CrIn=\“\”,CrOut=\“\”” “ADJ-1-37-20::FIBERTYPE=UNKNOWN,TargetSpanLoss=0.00,MinSpanLossMargin=0.00,SPANLOSSMARGIN=3.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\“\”,LINEIN=\“\”,LINEOUT=\“\”,CrIn=\“\”,CrOut=\“\” “ADJ-1-37-22::FIBERTYPE=UNKNOWN,TargetSpanLoss=0.00,MinSpanLossMargin=0.00,SPANLOSSMARGIN=3.00,SPANLOSSSOURCE=UNKNOWN,BUNDLEID=\“\”,LINEIN=\“\”,LINEOUT=\“\”,CrIn=\“\”,CrOut=\“\” 试试这个:

(ADJ-\d{1,3}-\d{1,3}-\d{1,3}):((SPANLOSSMARGIN=)?(\d{1,2}.\d{1,2})*

您可以在这里尝试:


第4组是
SPANLOSSMARGIN=
的匹配项,如果
SPANLOSSMARGIN=
不存在,则第3组将
null

我必须将其修改为
(ADJ-\d{1,3}-\d{1,3}-\d{1,3}):((SPANLOSSMARGIN=(\d{1,2}.\d{1,2}))*
由于第4组返回0.00,即使没有
SPANLOSSMARGIN
标记。这样可以吗?@surz我在回答中说,你需要检查第3组是否匹配。你是对的,我直接使用第4组,所以不得不稍微调整一下,你看到这个正则表达式中有什么问题吗?你修改的正则表达式对我来说似乎很好