re = /(?:\/\/(?:\\\n|[^\n])*\n)|(?:\/\*[\s\S]*?\*\/)|((?:R"([^(\\\s]{0,16})\([^)]*\)\2")|(?:@"[^"]*?")|(?:"(?:\?\?'|\\\\|\\"|\\\n|[^"])*?")|(?:'(?:\\\\|\\'|\\\n|[^'])*?'))/
str = '// /*
/*
This is a multi line comment
// <- ignored since in a comment */
// "abc" word "
// This is a single line comment
char cha1[] = "This is a string containing a combination //",
cha2[] = "This has /* a fake comment */ in it",
cha3[] = "This is tough because of (ignore this //) \\
line continueation",
cha4[] = "Handle comments in strings with \\" escaped quotes\\
and escaped escaped escapes \\\\";
// This is a single line comment \\
continuing on the next line
void main()
{
int chInt = \'\\\\b\\\'\';
printf("Hello world!");
cpp11_1(R"xy("/**/)xy");
cpp11_2(R"("/**/)");
cS(@"End at the right place\\" /*and ignore this */);
return 0;
}
'
subst = '\\1'
result = str.gsub(re, subst)
# Print the result of the substitution
puts result
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html