I have the following XML tag
I want to replace the < in the text with <
[^<]+ = one or more characters that are not <
< = the < you're looking for
replace:
([^<]+)<
with:
$1<
This would give you "<" after the first instance:
[^<]<
Try this:
(?<="[^"]*)<(?=[^"]*")
The dot '.' means "any value"
.<
Anyway, I suppose you don't want whitespaces, either. If so, then
\S\s*<
@duncan's method works fine if you just want to replacing, but it doesn't match the <.
and all the lookbehind wont work if you a using javascript. because javascript doesn't support lookbehind, unless you turn on the --harmony flag in nodejs or experimental javascript features in chrome.
But lookahead will work here, which is:
/(?!^)</
will match the < which is not at the begining of a line.
and the replacing will be:
'<list message="2 < 3">'.replace(/(?!^)</, '<')
Most likely you can do this using lookbehind:
/(?<!^)</
see: http://www.regular-expressions.info/lookaround.html