2016-10-06 6 views
2

У меня есть файл XML (назовем его module.xml), как показано ниже открыт в редакторе, например Notepad ++/Geany:Поиск и замена только в определенных тегов и атрибутов в XML-файл с помощью Regex

<?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> 

Теперь я хочу замените строку module/ на mycompany/module/ только тегами и атрибутами, содержащими только .phtml, т. е. в содержании template атрибута и <template> тег.

Как это сделать с помощью регулярного выражения? Я не знаю, когда дело доходит до выборочного поиска/замены в регулярном выражении.

+0

Почему бы вам не использовать парсер? –

+0

Этот файл проверен в редакторе, у меня установлен ubuntu 14.04, поэтому, если вы не предложите мне использовать sed/awk, я не могу использовать XML-парсер в редакторе (как я уже сказал в запросе), поскольку я не знаю, есть ли доступно для Geany/Notepad ++ –

+0

Что-то вроде [this] (https://regex101.com/r/6MS8ry/1)? –

ответ

1

Обратите внимание, что это будет работать с правильно сформированными файлами xml.


Вы можете использовать регулярное выражение (?=.*\.phtml)module\/ и заменить mycompany/module/.

Это:

(?=.*\.phtml) 

Является положительным опережения: он гарантирует, что регулярное выражение будет соответствовать в строке. module\/ - это строка, которую вы хотите заменить побегом на /.


Кроме того, вы должны прочитать это well known answer about parsing with regex.

+0

Хорошо, спасибо за ответ и дополнительную информацию даже в XML-анализе. Принимая это. –