我正在使用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>
,我可以使用它。
提前致谢。
答案 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>)+
截图: