2016-08-26 2 views
1

Я пытаюсь заменить некоторые строки с использованием регулярного выражения в HTML, но есть шведские символы, которые затрудняют мою жизнь.Заменить несколько специальных символов HTML с использованием regex

Она начинается, глядя, как это (я использую фиктивный текст вместо реального шведски):

<td class="swedish">abc defg&aring; hijk lmnop&auml;</td> 
    <td><?php audioButton("../../audio/lessons/01/some_old_text","some_old_text"); ?></td> 
    <td><?php audioButton("../../audio/lessons/01/slow/some_old_text_slx","some_old_text_slx","1"); ?></td> 

Шаг 1: мне удается поместить строку в первой метке внутри audiobutton, так выглядит следующим образом:

<td class="swedish">abc defg&aring; hijk lmnop&auml;</td> 
    <td><?php audioButton("../../audio/lessons/01/abc defg&aring; hijk lmnop&auml;","abc defg&aring; hijk lmnop&auml;"); ?></td> 
    <td><?php audioButton("../../audio/lessons/01/slow/abc defg&aring; hijk lmnop&auml;_slx","abc defg&aring; hijk lmnop&auml;_slx","1"); ?></td> 

Вы не должны читать это, но я сделал это со следующим:

Найти

<td class="swedish">(.*)</td>\n.*<td><\?php audioButton\("(.*)/.*",".*"\); \?></td>\n.*<td><\?php audioButton\("(.*)/.*",".*","1"\); \?></td> 

Заменить

<td class="swedish">$1</td> 
<td><?php audioButton("$2/$1","$1"); ?></td> 
<td><?php audioButton("$3/$1_slx","$1_slx","1");?></td> 

Это довольно просто, даже для нуба, как я.

Шаг 2: Теперь это то, где начинаются мои проблемы. Шведские символы ä, ö и å имеют специальные коды в HTML (&auml; - &ouml; and &aring;). Я должен заменить каждый экземпляр этого кода на ae, oe и aa соответственно и поместить подчёркивание между каждым словом. Это должно произойти только в аудиокниге.

Конечный результат должен выглядеть следующим образом:

<td class="swedish">abc defg&aring; hijk lmnop&auml;</td> 
    <td><?php audioButton("../../audio/lessons/01/abc_defgaa_hijk_lmnopae","abc_defgaa_hijk_lmnopae"); ?></td> 
    <td><?php audioButton("../../audio/lessons/01/slow/abc_defgaa_hijk_lmnopae_slx","abc_defgaa_hijk_lmnopae_slx","1"); ?></td> 

Это где моя регулярное выражение грамотность подводит меня. Наверное, это очень просто, но я не вижу этого. Я бы очень признателен за помощь. Было бы особенно здорово, если бы я мог сделать все за один шаг вместо двух.

+0

Необходимо несколько поиска/замены хиты, которые мне не нравятся. Поэтому я предлагаю [писать макросы] (http://superuser.com/questions/605861/how-do-i-record-and-run-multiple-find-replace-with-sublime-text-2) для ускорения . – revo

+0

Спасибо. Я посмотрю. Надеюсь, это достаточно просто;) – Moogal

+0

Может кто-то помочь мне со вторым шагом? – Moogal

ответ

0

Вот цикл Баш, который заменит audioButton вхождений, как вы хотите:

for line in $(egrep "audioButton" swedish.txt | sed -e 's?\ ?::ZZqC::?g') ; do 
    real_line=$(echo "${line}" | sed -e 's?::ZZqC::?\ ?g') ; 
    new_line=$(echo "${real_line}" | sed -e 's?&auml;?ae?g' -e 's?&ouml;?oe?g' -e 's?&aring;?aa?g' -e 's?\([a-z]\) ?\1_?g') ; 
    sed -i -e "s|${real_line}|${new_line}|g" swedish.txt ; 
done 
+0

Спасибо большое! Честно говоря, это далеко за пределами моей компетенции. Я не знаю, как его использовать :( Я просто поместил свой HTML в Sublime Text и возился с регулярным выражением, пока что-то не сработает. Было бы даже лучше, если бы он работал в Dreamweaver, потому что тогда я могу искать и заменять все мои файлы, но я не думаю, что кто-то использует Dreamweaver. – Moogal