通过正则表达式仅在 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。
我有一个 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。