如何使用Notepad ++在<wp:postmeta> </wp:postmeta>标签之间查找和替换文本

时间:2015-12-25 00:56:53

标签: regex xml replace notepad++

我正在使用XML导出来删除旧的通缉数据并将其替换为相关标签。我一直在环顾四周,但一直无法找到我正在寻找的东西,所以请原谅我,如果这看起来多余的话。

我希望替换<wp:postmeta></wp:postmeta>代码中的所有数据。但是,由于它们跨越多行,因此.*?不像过去那样有效。我相信这意味着它只能跨越一条线。以下是代码示例:

<item>
    //Start of find

    <wp:postmeta>
        <wp:meta_key><![CDATA[_edit_last]]></wp:meta_key>
        <wp:meta_value><![CDATA[3]]></wp:meta_value>
    </wp:postmeta>
    <wp:postmeta>
        <wp:meta_key><![CDATA[_thumbnail_id]]></wp:meta_key>
        <wp:meta_value><![CDATA[51833]]></wp:meta_value>
    </wp:postmeta>
    <wp:postmeta>
        <wp:meta_key><![CDATA[snapEdIT]]></wp:meta_key>
        <wp:meta_value><![CDATA[1]]></wp:meta_value>
    </wp:postmeta>

    // End of find using Notepad++
</item>
<item>
    //Start of find

    <wp:postmeta>
        <wp:meta_key><![CDATA[_edit_last]]></wp:meta_key>
        <wp:meta_value><![CDATA[3]]></wp:meta_value>
    </wp:postmeta>
    <wp:postmeta>
        <wp:meta_key><![CDATA[_thumbnail_id]]></wp:meta_key>
        <wp:meta_value><![CDATA[51425]]></wp:meta_value>
    </wp:postmeta>

    // End of find using Notepad++
</item>

我特意在其相应的打开和关闭<wp:postmeta>标记中查找并替换从第一个</wp:postmeta>标记到最后一个结束item的结尾的所有内容。有数以百计这些,我宁愿不逐一去。如果可能,请告诉我。如果不可能,我想知道如何从一个<wp:postmeta>转到结束</wp:postmeta>,我可以使用它。

提前致谢。

1 个答案:

答案 0 :(得分:3)

在Notepad ++中,要强制.匹配换行符(多行文本块),您需要在查找和替换对话框中启用. matches newline选项。

请注意,使用正则表达式更改(X)HTML代码非常困难并且容易出错。

所以,如果您知道自己在做什么,可以启用我上面提到的选项并使用正则表达式<wp:postmeta>.*?</wp:postmeta>并替换为您需要的任何内容。请参阅regex demo

如果存在没有结束</wp:postmeta>的大文本块,则可能会遇到超时问题。然后,您需要展开正则表达式:

<wp:postmeta>[^<]*(?:<(?!/wp:postmeta>)[^<]*)*</wp:postmeta>

请参阅正则表达式演示。无论. matches newline选项如何,此正则表达式都将匹配换行符。

如果您需要匹配相邻的wp:postmeta标签,您可以在模式周围使用非捕获组并为其设置+量词:

(?:\s*<wp:postmeta>[^<]*(?:<(?!/wp:postmeta>)[^<]*)*</wp:postmeta>)+

请参阅one more demo

截图:

enter image description here