-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; EmailId=rr@myglobal.com; 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;
    }
4

1 に答える 1

1

AgentIdあなたの質問は少し不可解です。私が理解していることから、フィールドの値を一致/抽出したいときにコードが機能しないということです。問題は正規表現にあるようです"^"+paternField + "=(.*?);"。テキストが文字列の先頭にあると想定していますAgentIdが、文字列の先頭にあるのではありませんIsPrimaryAgentId

また、現在の正規表現は、両方に部分文字列が含まれているためIsPrimaryAgentId、および両方にtrueを返します。これを修正するには、次の正規表現を使用できます。これには、テキストの前に空白が必要です。AgentIdAgentId\\s+AgentId=(.*?);AgentId

別のオプションは、これを使用することです(常に数値である場合)AgentId:。AgentId=(\\d+);

于 2012-06-11T06:58:19.323 に答える