Java正则表达式与多行字符串不匹配

时间:2014-10-15 14:56:11

标签: java regex matcher

我在查找多行字符串时遇到问题: 我在“contractBytes”var:

中有这个文本
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Records xmlns="http://www.datapump.cig.com">
<Contract phaseId="4" operation="2">
    <General>
        <ContractCode>8848</ContractCode>
        <DateOfSignature>2009-09-08</DateOfSignature>
        <CreditPurpose id="20"/>
        <NegativeStatus id="4"/>
        <ApplicationDate>2009-09-08</ApplicationDate>
        <StartDate>2009-09-08</StartDate>
        <ExpectedEndDate>2011-03-31</ExpectedEndDate>
        <Subjects>
            <Subject roleId="1">
                <Entity>
                    <Individual gender="1">
                        <FirstName>
<Text language="uk-UA">украинский</Text>
                        </FirstName>
                        <Surname>
<Text language="uk-UA">Первый</Text>
                        </Surname>
                        <FathersName>
<Text language="uk-UA">контрагент</Text>
                        </FathersName>
                        <Classification id="1"/>
                        <DateOfBirth>1980-12-06</DateOfBirth>
                        <Residency id="1"/>
                        <Citizenship code="UA"/>
                        <MaritalStatus id="2"/>
                        <Identifications>
<Identification typeId="2">
<Number>2554209876</Number>
</Identification>
<Identification typeId="4">
<Number>ВЦ620997</Number>
<IssueDate>1997-04-01</IssueDate>
<Authority language="uk-UA">Дебальцевский ГОУМВД Украины в Донецкой области</Authority>
</Identification>
<Identification typeId="1">
    <Number>2554209876</Number>
</Identification>
                        </Identifications>
                        <Addresses>
<Address typeId="2">
<Street>
    <Text language="uk-UA">м. Kharkov, вул. Street, буд. 1, кв. 1</Text>
</Street>
</Address>
                        </Addresses>
                    </Individual>
                </Entity>
            </Subject>
        </Subjects>
    </General>
    <Type>
        <Credit paymentPeriodId="9" paymentMethodId="6">
            <CreditLimit currency="USD">7800.0</CreditLimit>
            <Records>
                <Record accountingDate="2011-04-20">
                    <CreditUsage id="3"/>
                    <ResidualAmount currency="USD">7800.0</ResidualAmount>
                    <OverdueAmount currency="USD">0.0</OverdueAmount>
                </Record>
            </Records>
        </Credit>
    </Type>
</Contract>

我正在尝试使用正则表达式:

Pattern p = Pattern.compile("(<Contract)(.)*(Contract>)", Pattern.DOTALL);
Matcher m = p.matcher(contractBytes);
for (;m.find();)
{
    if (m.group(1).contains("<ContractCode>" + contractCode + "</ContractCode>"))
    {
        dealXmlMap.put(Long.parseLong(contractCode), m.group(1));
        break;
    }
} 

但是m.find总是返回false。 我应该怎么做这个模式来从contractBytes var?

获取文本

1 个答案:

答案 0 :(得分:1)

(<Contract)(.*)(Contract>)

试试这个。看看演示。(.)*你捕获的不是第一个字符。

http://regex101.com/r/dZ1vT6/25