2012-06-11 49 views
-1

我做了一個應用程序,我可以通過正則表達式在匹配器的幫助下獲得字段值...我做了一個方法,在該方法中,我傳遞一個字段並獲得響應。在字符串今天我得到了一些奇怪的行爲,我的答覆我得到了AgentId = 25001220052805950和匹配器後,我得到fake,所以我必須檢查名稱中包含「AgentId」的字段是否存在並驗證值。問題與正則表達式

所需的字段: SecondaryAgentId=fake;PrimaryAgentId=fake;

性反應:

IsPrimaryAgentId=true; AgentId=25001220052805950; MerchantID=19; Cashier=michael; IsManualPayment=1; UserID=GraceRose; Password=rose1234; AmountUserEntered=2; AmountApproved=0; AmountDifference=0; Amount=0; CustomerNameAttempts=0; ProductID=Agriculture; InvoiceID=inv7443; SiteUrl=http://www.thcelink.com/index.php/shoping/checkout/step/step-1; ReturnURL=http://220.2.3:2027/Customer/Thanks.aspx; ResponseType=1; PrimaryAgentId=fake; PrimaryCurrencyCode=fake; SecondaryAgentId=fake; SecondaryCurrencyCode=fake; MerchantName=GraceRose; [email protected]; Query1Attempts=0; MerchantTransactionID=543; MerchantTransactionSequenceID=246; txtAmtIsVisible=false; isQuery1Executed=false; isQuery2Executed=false; Voucher=fake; Passcode=fake; Error=fake; QueryType=fake; Payer=fake; CurrencyName=fake; CurrencySymbol=fake; CustomerName=fake; EmailBody=fake; ErrorText=fake; CustomerEmailID=fake; NavigatePageValue=0; IsCustomerInsertSucess=false; IdType=fake; IdNumber=fake; AggregateAttempts=0; Voucher2=fake; PassCode2=fake; Voucher3=fake; PassCode3=fake; TransCode=0; TransactionDate=2012-06-11T12:04:52.921875+05:30; NumberInWords=fake; MerchantCompany=fake; InvoiceNumber=fake; OverPaidAmount=0; InsufficientAmount=0; OverPaymentForEmail=fake; RedirectPage=false; 

更新::

private String GetString1(String strManualproResponce2, String paternField) { 
     // TODO Auto-generated method stub 
     String s = null; 
     if(paternField.equalsIgnoreCase("AgentId")) 
     { 
      Pattern pinPattern2 = Pattern.compile("^"+paternField + "=(.*?);"); 
      ArrayList<String> pins2 = new ArrayList<String>(); 
      Matcher m2 = pinPattern2.matcher(strManualproResponce2); 
      while (m2.find()) { 
       pins2.add(m2.group(1)); 
       s = m2.group(1); 
      } 
     }else 
     { 
     Pattern pinPattern2 = Pattern.compile(paternField + "=(.*?);"); 
     ArrayList<String> pins2 = new ArrayList<String>(); 
     Matcher m2 = pinPattern2.matcher(strManualproResponce2); 
     while (m2.find()) { 
      pins2.add(m2.group(1)); 
      s = m2.group(1); 
     } 
     } 

     return s; 
    } 
+0

請提供一些你想要的答案和錯誤答案的示例你已經有的代碼 –

+0

我有更新...... –

+0

什麼是'paternField'? –

回答

1

你的問題有點位C ryptic,從我的理解是,代碼不適用於當您想匹配/提取AgentId字段的值。這個問題似乎與你的正則表達式有關:"^"+paternField + "=(.*?);"假設文本AgentId將在你的字符串的開頭,這不是因爲在你的字符串的開頭你有IsPrimaryAgentId

另外,您的當前正則表達式將返回true和IsPrimaryAgentIdAgentId,因爲它們都包含子字符串:AgentId。要解決這個問題,你可以使用這個正則表達式:\\s+AgentId=(.*?);,這將需要在AgentId文本之前有一個空格。

另一種選擇是(如果您的AgentId將始終是數字)使用此:AgentId=(\\d+);