I'm using Clojure, so this is in the context of Java regexes.
Here is an example string:
{:a "ab,cd, efg", :b "ab,def, egf,", :c "Conjecture"}
The important bits are the commas after each string. I'd like to be able to replace them with newline characters with Java's replaceAll method. A regex that will match any comma that is not surrounded by quotes will do.
If I'm not coming across well, please ask and I'll be happily to clarify anything.
edit: sorry for the confusion in the title. I haven't been awake very long.
String: {:a "ab, cd efg",}
<– In this example, the comma at the end would be matched, but the ones inside the quote would not.
String: {:a 3, :b 3,}
<– Every single comma matches.
String {:a "abcd,efg" :b "abcedg,e"}
<– Every single comma doesn't match.
Best Answer
The regex:
Matches:
and:
and does not match a comma in:
But when escaped quotes can appear, like so:
then a regex solution won't work.
A brief explanation of the regex:
In other words: match any comma that has zero, or an even number of quotes ahead of it (until the end of the string).