通过正则表达式仅在 XML 文件中的某些标签和属性中搜索和替换

Search and replace in only certain tags and attributes in XML file by a regular expression

我有一个 XML 文件(称之为 module.xml),如下所示 像 Notepad++ or Geany:

这样的编辑器
<?xml version="1.0"?>
<layout version="0.1.0">
    <default>
        <reference name="head">
            <action method="addItem"><type>skin_js</type><name>module/js/jquery.js</name></action>
            <action method="addItem"><type>skin_js</type><name>module/js/module-slider.js</name></action>
            <action method="addItem"><type>skin_css</type><name>module/module.css</name></action>
            <action method="addItem"><type>skin_js</type><name>module/js/module-video.js</name></action>
            <action method="addItem"><type>skin_js</type><name>module/js/nicEdit-latest.js</name></action>
        </reference>
        <reference name="left">
            <block type="module/subscribe" name="module.left.subscribe" template="module/left-sidebar.phtml" />
        </reference>
        <reference name="right">
            <block type="module/subscribe" name="module.right.subscribe" template="module/right-sidebar.phtml" before="-" />
        </reference>
        <reference name="top.links">
            <action method="addLink" translate="label title" module="module" ifconfig="module/settings/quicklinks">
                <label>Module Title</label>
                <url>module</url>
                <title>Module Title</title>
                <prepare>true</prepare>
                <urlParams/>
                <position>99</position>
            </action>
        </reference>
        <reference name="footer_links">
            <action method="addLink" translate="label title" module="module" ifconfig="module/settings/quicklinks">
                <label>Module Title</label>
                <url>module</url>
                <title>Module Title</title>
                <prepare>true</prepare>
                <urlParams/>
                <position>99</position>
            </action>
        </reference>
    </default>
    <module_index_index>
        <reference name="content">
            <block type="module/list" name="module_list" template="module/list.phtml" />
        </reference>
    </module_index_index>
    <module_create_index>
        <reference name="content">
            <block type="module/list" name="module.create">
                <action method="setTemplate"><template>module/create.phtml</template></action>
            </block>
        </reference>
    </module_create_index>
</layout>

现在我只想在仅包含 .phtml 文件名的标签和属性中将字符串 module/ 替换为 mycompany/module/,即 template 属性和 <template> 标签。

如何使用正则表达式执行此操作?当涉及到使用正则表达式的选择性 find/replace 时,我没有想法。

请注意,这将适用于格式正确的 XML 文件。


您可以使用正则表达式 (?=.*\.phtml)module\/ 并替换为 mycompany/module/

这个:

(?=.*\.phtml)

是一个积极的前瞻:它将确保正则表达式将在行中匹配。 module\/ 是您要用 /.

上的转义符替换的字符串

此外,您应该阅读此 well-known answer about parsing with regular expression