如何匹配正则表达式中包含任何符号(包括新行)的关键字之间的字符串

时间:2015-12-25 18:01:04

标签: regex

我有这个xml文件

<?xml version="1.0" encoding="UTF-8"?>
<?mso-infoPathSolution solutionVersion="1.0.0.182" productVersion="15.0.0" PIVersion="1.0.0.0" href="http://sp01/hp/Therapy/Forms/template.xsn" name="urn:schemas-microsoft-com:office:infopath:Therapy:-myXSD-2013-03-01T10-07-30" ?>
<?mso-application progid="InfoPath.Document" versionProgid="InfoPath.Document.3"?>
<my:myFields
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:pc="http://schemas.microsoft.com/office/infopath/2007/PartnerControls"
        xmlns:ma="http://schemas.microsoft.com/office/2009/metadata/properties/metaAttributes"
        xmlns:d="http://schemas.microsoft.com/office/infopath/2009/WSSList/dataFields"
        xmlns:q="http://schemas.microsoft.com/office/infopath/2009/WSSList/queryFields"
        xmlns:dfs="http://schemas.microsoft.com/office/infopath/2003/dataFormSolution"
        xmlns:dms="http://schemas.microsoft.com/office/2009/documentManagement/types"
        xmlns:xhtml="http://www.w3.org/1999/xhtml"
        xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2013-03-01T10:07:30"
        xmlns:xd="http://schemas.microsoft.com/office/infopath/2003"
        xml:lang="en-us">
    <my:PatientID>1</my:PatientID>
    <my:Name>name</my:Name>
    <my:Age>29.0000000000000</my:Age>
    <my:Gender>gender</my:Gender>
    <my:Date>2015-12-09</my:Date>
    <my:group1>
        <my:group2>
            <my:field1>1</my:field1>
            <my:PName>pname</my:PName>
            <my:PPrice>10000.0000000000</my:PPrice>
            <my:field11 xsi:nil="true"></my:field11>
        </my:group2>
        <my:group2>
            <my:field1>9</my:field1>
            <my:PName>pname
            </my:PName>
            <my:PPrice>10000.0000000000</my:PPrice>
            <my:field11 xsi:nil="true"></my:field11>
        </my:group2>
    </my:group1>
    <my:field4></my:field4>
    <my:field5></my:field5>
    <my:Status>false</my:Status>
    <my:Confirm>false</my:Confirm>
    <my:field6></my:field6>
    <my:field7></my:field7>
    <my:field8></my:field8>
    <my:TPrice>20000</my:TPrice>
    <my:field12></my:field12>
    <my:field13></my:field13>
    <my:insurance>1</my:insurance>
    <my:Partner>partner</my:Partner>
    <my:Doctor>doctor</my:Doctor>
</my:myFields>

我想用正则表达式对其进行过滤,只得到tag的值,即

<my:group1>
    <my:group2>
        <my:field1>1</my:field1>
        <my:PName>pname</my:PName>
        <my:PPrice>10000.0000000000</my:PPrice>
        <my:field11 xsi:nil="true"></my:field11>
    </my:group2>
    <my:group2>
        <my:field1>9</my:field1>
        <my:PName>pname
        </my:PName>
        <my:PPrice>10000.0000000000</my:PPrice>
        <my:field11 xsi:nil="true"></my:field11>
    </my:group2>
</my:group1>

我试图用这个正则表达式过滤它

<my:group1>(.*\r*\n*)*<\/my:group1>
但似乎我的方向错了。如何在我的关键字之间过滤任何字符,包括新行?

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式(demo):

<my:group1>(.|\n|\r)*<\/my:group1>

请,请使用xml解析器来解析xml,而不是正则表达式。

答案 1 :(得分:1)

  

如何在关键字之间过滤任何字符,包括新行?

由于.字符不包含换行符,因此您可以使用s标记以匹配所有字符,包括换行符 - example

/<my:group1>(.*)<\/my:group1>/s

或者,您也可以使用字符集来匹配所有空白字符(\s)和所有非空白字符(\S),它们基本上匹配所有内容 - example

<my:group1>([\s\S]*)<\/my:group1>
相关问题