【问题标题】:Java regex doesn't match multiline stringJava 正则表达式与多行字符串不匹配
【发布时间】:2014-10-15 14:56:10
【问题描述】:

我在查找多行字符串时遇到问题: 我在“contractBytes”变量中有这个文本:

<?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 中获取文本?

【问题讨论】:

标签: java regex matcher


【解决方案1】:
(<Contract)(.*)(Contract>)

试试这个。见演示。(.)*你只是捕获了第一个字符而不是全部。

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

【讨论】:

  • 看在上帝的份上,不要给一个盯着枪管抱怨枪不响的人发子弹
  • @user3734984 它正在运行。您的代码中还有其他错误。我的一些 java 人可以告诉您
  • @Floegipoky 是的。但至少他能理解这个概念:)
猜你喜欢
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多