/* Separar texto por comas, excepto entre comillas, con expresiones regulares
Con comillas escapadas
https://es.stackoverflow.com/q/65502/127 */
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Ideone
{
{
final String regex
= ",(\"([^\\\\\"]*(?:\\\\.[^\\\\\"]*)*)\"|[^,]*)"; final String text
= ",aaa,\"bbb\\\"bbb\",ccc,";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher("," + text);
int n = 0;
System.
out.
println("Texto original: " + text
);
while (matcher.find()) {
System.
out.
print ("Elemento " + ++n
+ ": "); if (matcher.group(2) != null)
{ // Elemento entre comillas?
elemento = matcher.group(2); // Obtener el texto sin las comillas
}
else
{
elemento = matcher.group(1);
}
}
}
}
LyogU2VwYXJhciB0ZXh0byBwb3IgY29tYXMsIGV4Y2VwdG8gZW50cmUgY29taWxsYXMsIGNvbiBleHByZXNpb25lcyByZWd1bGFyZXMKICAgQ29uIGNvbWlsbGFzIGVzY2FwYWRhcwogICBodHRwczovL2VzLnN0YWNrb3ZlcmZsb3cuY29tL3EvNjU1MDIvMTI3ICovCgppbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7CmltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKCmNsYXNzIElkZW9uZQp7CglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlmaW5hbCBTdHJpbmcgcmVnZXggPSAiLChcIihbXlxcXFxcIl0qKD86XFxcXC5bXlxcXFxcIl0qKSopXCJ8W14sXSopIjsKCQlmaW5hbCBTdHJpbmcgdGV4dCAgPSAiLGFhYSxcImJiYlxcXCJiYmJcIixjY2MsIjsKCQkKCQlmaW5hbCBQYXR0ZXJuIHBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUocmVnZXgpOwoJCWZpbmFsIE1hdGNoZXIgbWF0Y2hlciA9IHBhdHRlcm4ubWF0Y2hlcigiLCIgKyB0ZXh0KTsKCQlpbnQgbiA9IDA7CgkJU3RyaW5nIGVsZW1lbnRvOwoJCQoJCVN5c3RlbS5vdXQucHJpbnRsbigiVGV4dG8gb3JpZ2luYWw6ICIgKyB0ZXh0KTsKCQkKCQl3aGlsZSAobWF0Y2hlci5maW5kKCkpIHsKCSAgICAgICAgU3lzdGVtLm91dC5wcmludCAgKCJFbGVtZW50byAiICsgKytuICsgIjogIik7CgkgICAgICAgIGlmIChtYXRjaGVyLmdyb3VwKDIpICE9IG51bGwpCgkJICAgIHsgICAvLyBFbGVtZW50byBlbnRyZSBjb21pbGxhcz8KCQkgICAgICAgIGVsZW1lbnRvID0gbWF0Y2hlci5ncm91cCgyKTsgLy8gT2J0ZW5lciBlbCB0ZXh0byBzaW4gbGFzIGNvbWlsbGFzCgkJICAgIH0KCQkgICAgZWxzZQoJCSAgICB7CgkJICAgICAgICBlbGVtZW50byA9IG1hdGNoZXIuZ3JvdXAoMSk7CgkJICAgIH0KCQkgICAgU3lzdGVtLm91dC5wcmludGxuKGVsZW1lbnRvKTsKCQl9Cgl9Cn0=