具有多重重复的正则表达式

我现在很难用正则表达式。

我能够在Regexbuddy中调试正则表达式但不知何故它在C#.net中不起作用。

例如。

我的输入字符串: –

--8W1_805_431____0210_A01_0002_L--;%{PE}%R 8.2.24,%MKUKATPBASIS,%CCOMMENT,%VNORMAL,%P 2: --8W1_805_431____0210_A01_0002_L-- ;ENDFOLD ;FOLD PTP SG003920 Vel=100 % PDAT5 ServoGun=8 Cont=OPN Part=2.65 mm WeldTimer=WTDAT1 Tool[1]:zc1 Base[1]:510wz1;%{PE}%R 4.1.25,%MKUKATPSERVOTECH,%CSpotTC,%VPTP,%P 1:PTP, 2:SG003920, 3:, 5:100, 7:PDAT5, 9:1, 11:1, 13:OPN, 15:2.65, 18:1, 21:0, 24:0, 27:5, 30:0, 33:WTDAT1 $BWDSTART=FALSE PDAT_ACT=PPDAT5 FDAT_ACT=FSG003920 BAS(#PTP_PARAMS,100) EG_SPOT_POINT_NAME[]="SG003920" EG_EXTAX_ACTIVE=EG_SERVOGUN_EXAXIS[1] EG_THICKNESS=2.65 EG_GUN_FORCE=1 EG_COMP_HELP=0 EG_COMPENSATE_PATH=0 EG_PROGRAM_NUMBER=003920 EG_HELPPOINT=EG_CHTIP(XSG003920) PTP EG_HELPPOINT EG_APPROX_OPEN=FALSE CMD=#SPOT EG_SPOT_POINT=EG_HELPPOINT EG_SPOT( WTWTDAT1 ) PTP EG_HELPPOINT C_DIS CMD=#STOP_POINT_END EG_SPOT_POINT=EG_HELPPOINT EG_SPOT( ) ; --8W1_112_431____0210_A01_0001_L--;%{PE}%R 8.2 ;FOLD PTP SG003918 Vel=100 % PDAT7 ServoGun=1 Cont=OPN Part=2.65 mm WeldTimer=WTDAT2 Tool[1]:zc1 Base[1]:510wz1;%{PE}%R 4.1.25,%MKUKATPSERVOTECH,%CSpotTC,%VPTP,%P 1:PTP, 2:SG003918, 3:, 5:100, 7:PDAT7, 9:1, 11:1, 13:OPN, 15:2.65, 18:1, 21:0, 24:0, 27:5, 30:0, 33:WTDAT2 $BWDSTART=FALSE PDAT_ACT=PPDAT7 FDAT_ACT=FSG003918 BAS(#PTP_PARAMS,100) EG_SPOT_POINT_NAME[]="SG003918" EG_EXTAX_ACTIVE=EG_SERVOGUN_EXAXIS[1] EG_THICKNESS=2.65 EG_GUN_FORCE=1 EG_COMP_HELP=0 EG_COMPENSATE_PATH=0 EG_PROGRAM_NUMBER=003918 EG_HELPPOINT=EG_CHTIP(XSG003918) PTP EG_HELPPOINT EG_APPROX_OPEN=FALSE CMD=#SPOT EG_SPOT_POINT=EG_HELPPOINT EG_SPOT( WTWTDAT2 ) PTP EG_HELPPOINT C_DIS CMD=#STOP_POINT_END EG_SPOT_POINT=EG_HELPPOINT EG_SPOT( ) ;ENDFOLD Regex Pattern:- --(?8W.*?)--.*?(?PTP|LIN).*?(?SG) 

对于组PName,输出必须如此。

8W1_112_431____0210_A01_0001_L

8W1_805_431____0210_A01_0002_L

当我在c#中运行这个正则表达式时,它的返回总是为假。

请任何人指导我这里有什么问题。

提前致谢。

解决方案很简单:在开头添加(?s) 。 或者在Regex.Match使用RegexOptions.Singleline标志。

请参阅IDEONE演示

您需要了解正则表达式修饰符在.NET正则表达式中的作用 :

  • RegexOptions.Singleline指定单行模式。 更改点( . )的含义,使其匹配每个字符(而不是除\n之外的每个字符)。 有关详细信息,请参阅“ 正则表达式选项”主题中的“单行模式”部分。

  • RegexOptions.Multiline多行模式。 更改^$的含义,使它们分别在任何行的开头和结尾匹配,而不仅仅是整个字符串的开头和结尾。 有关详细信息,请参阅“ 正则表达式选项”主题中的“单行模式”部分。

另外,请参阅正则表达式修饰符’m’和’s’之间的区别?