Paul Sweatte
Paul Sweatte

Reputation:

Regular Expression for Conditional Substitution of Angle Brackets

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

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

Upvotes: 1

Views: 2226

Answers (6)

Paul Sweatte
Paul Sweatte

Reputation: 24637

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;

Upvotes: 0

user189457
user189457

Reputation:

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;/

Upvotes: 0

too much php
too much php

Reputation: 91068

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.

Upvotes: 1

brianary
brianary

Reputation: 9332

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;")

Upvotes: 0

Johan Soderberg
Johan Soderberg

Reputation: 2740

You could use a hash-variable, something like:

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

Upvotes: 0

Brian Agnew
Brian Agnew

Reputation: 272417

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.

Upvotes: 2

Related Questions