String str = "\uFEFF<?xml version=\"1.0\" encoding=\"utf-8\"?><Response xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><Header ShouldRecordPerformanceTime=\"false\" Timestamp=\"2018-6-25 21:24:03\" RequestID=\"2c4d0b24-fd48-4a92-a2d8-c66793df2059\" ResultCode=\"Success\" AssemblyVersion=\"2.9.5.0\" RequestBodySize=\"0\" SerializeMode=\"Xml\" RouteStep=\"1\" Environment=\"pro\" /><SSPATResponse><Result>0</Result><FareDetail /><Price>0</Price><ErrCode>102</ErrCode><DetailInfo>Send:APPLOCK\n" +
"Rev:\n" +
"可用资源锁定成功, 60 秒内没有输入指令资源将被Buk收回\n" +
"Send:IG\n" +
"Rev:\n" +
"NO PNR\n" +
"Send:\n" +
"SS:AA186/N/27JUN18/PEKORD/NN1;\n" +
"Rev:\n" +
"AA 186 N 27JUN PEKORD NN1 WL OPEN \n" +
"UNABLE TO SELL.PLEASE CHECK THE AVAILABILITY WITH \"AV\" AGAIN\n" +
"Send:IG\n" +
"Rev:</DetailInfo><PatOfficeno>SHA717</PatOfficeno></SSPATResponse><ResponseStatus><Timestamp xmlns=\"http://soa.ctrip.com/common/types/v1\">2018-06-25T21:24:03.4535624+08:00</Timestamp><Ack xmlns=\"http://soa.ctrip.com/common/types/v1\">Success</Ack></ResponseStatus></Response>";
String regex = "<DetailInfo>((.|\\n")*?)</DetailInfo>";
str为要匹配的字符串(是传入的),regex为正则表达式
目的是匹配出<DetailInfo>标签中的内容
在本地测试时可以匹配出来,但是在线上就不行。
真的是百思不得其解……
后来认真比对了一下线上传入的str和本地复制过来的str,发现了了一个微小的不同
线上传入的str行分隔符是\r\n,而复制粘贴到本地之后都变成了\n
而我的正则表达式中只匹配了\n的情况,因此出现这样的bug
提醒自己要注意系统之间的差别,win上的行分隔符是\n,而Linux是\r\n
为了能适配所有的环境,可以直接用System.lineSeparator()来替代,当然也可以把表达式写成这样(
<DetailInfo>((.|\\n|\\r\\n")*?)</DetailInfo>