re = /(?:^ *(?:\/\*\*[^\/\n]*\r?\n(?:[^\/\n]*\r?\n)*[^\/\n]*\*\/ *|\/\/.*)\r?\n)+(?: *[\r?\n])*#ifdef BUILD_FLAG\r?\n[\s\S]*?^#endif\r?\n/m
str = ' Code here
and here
//this is s comment block
/**
*and a nested comment block
*/
//-----------------------------------------------------------------------------
// this comment block should not be captured
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// this whole comment block and the conditional block below should be captured
//-----------------------------------------------------------------------------
/**
* @brief Some comment
*
xxxxx
* @return
*/
//-----------------------------------------------------------------------------
#ifdef BUILD_FLAG
...
#endif
More code
More code
//---------------------------------------------------------
// this whole comment block and the conditional block below should be captured
// --------------------------------------------------------
#ifdef BUILD_FLAG
...
#endif
More code
//-------------------------------------------------------------------------
/**
* @name this whole block comment should be captured.
* @{
*/
#ifdef BUILD_FLAG
...
#endif
'
subst = ''
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