Regular Expression for Conditional Substitution of Angle Brackets

喜夏-厌秋 提交于 2019-12-22 01:16:33

问题


Is it possible to create a single regexp to replace < and > with their entity equivalents in Komodo Edit?

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

回答1:


I'm guessing that you may have to convert & to &amp; and so on.

If this is the case there's most likely a library or function in whichever language/platform you're using (e.g. in Java check out StringEscapeUtils). Indicate which language you're using and someone here will no doubt point you to something appropriate.




回答2:


It is easy in to do this in just about any language without using regex:

PHP:

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

Python:

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

etc.




回答3:


You could use a hash-variable, something like:

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



回答4:


It depends on the language you are using. In Perl, you could do:

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

Other languages usually allow you to provide a match callback function that returns a replacement string. To wit: In C#, you can do this:

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



回答5:


Thanks everyone. I was looking for something I could use in Komodo Edit, so variables and conditional statements were not an option. Here is the best solution I found, which was based on a Sed tutorial at IBM Developerworks:

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



回答6:


In Komodo Edit 5.x, use the moreKomodo extension to save the following find/replace regex search:

Find:

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

Replace:

&lt;\1&gt;\2&lt;\3&gt;


来源:https://stackoverflow.com/questions/1495425/regular-expression-for-conditional-substitution-of-angle-brackets

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!