繁体   English   中英

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

[英]How to match a string between keywords containing any symbol (including new lines) in 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>

但似乎我走错了方向。 如何过滤关键字之间的任何字符,包括换行符?

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

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

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

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

自从. 性格不包括换行符,您可以使用s -让所有的字符,包括换行符匹配标志例子

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

另外,您也可以使用字符集来匹配所有空白字符( \\s )和所有非空白字符( \\S ),这实际上将匹配所有内容-example

<my:group1>([\s\S]*)<\/my:group1>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM