Регулярен израз за условно заместване на ъглови скоби

Възможно ли е да се създаде единичен регулярен израз, който да замени ‹ и > с техните еквиваленти на обект в Komodo Edit?

s/<|>/&lt;|&gt;/

person Community    schedule 29.09.2009    source източник


Отговори (6)


Предполагам, че може да се наложи да конвертирате & в &amp; и т.н.

Ако случаят е такъв, най-вероятно има библиотека или функция, независимо от езика/платформата, която използвате (напр. в Java вижте StringEscapeUtils). Посочете кой език използвате и някой тук без съмнение ще ви насочи към нещо подходящо.

person Brian Agnew    schedule 29.09.2009

Лесно е да направите това на почти всеки език без да използвате регулярен израз:

PHP:

$xml = str_replace(array('>', '<'), array('&gt;','&lt;'), $xml);

Python:

xml = xml.replace('>', '&gt;').replace('<','&lt;');

и т.н.

person too much php    schedule 29.09.2009

Можете да използвате хеш-променлива, нещо като:

my %data;
$data{"<"} = '&lt;';
$data{">"} = '&gt;';
s/(<|>)/$data{$1}/g;
person Johan Soderberg    schedule 29.09.2009

Зависи от езика, който използвате. В Perl можете да направите:

s/([<>])/$1 eq '<' ? '&lt;' : '&gt;'/ge

Други езици обикновено ви позволяват да предоставите функция за обратно извикване на съответствие, която връща заместващ низ. Например: В C# можете да направите това:

Regex.Replace("<", "([<>])", x => x.Value == "<" ? "&lt;" : "&gt;")
person brianary    schedule 29.09.2009

Благодаря на всички. Търсех нещо, което мога да използвам в Komodo Edit, така че променливите и условните изрази не бяха опция. Ето най-доброто решение, което намерих, което се основава на урок за Sed на IBM Developerworks:

s/<([^>]*)>([^<]*)<([^>]*)>/&lt;\1&gt;\2&lt;\3&gt;/
person Community    schedule 13.10.2009

В Komodo Edit 5.x използвайте moreKomodo разширение за запазване на следното намиране/замяна търсене с регекс:

Намирам:

<([^>]*)>([^<]*)<([^>]*)>

Замени:

&lt;\1&gt;\2&lt;\3&gt;
person Paul Sweatte    schedule 12.07.2013