fork(1) download
  1. <?
  2. $text= file_get_contents("php://stdin");
  3. $RE = <<< HEREDOC
  4.   ^ # начало строки или текста
  5.   (?P<probel>
  6.   (?:
  7.   [ \\t] | # пробелы, табуляция или
  8.   \\\\ # обратный слэш, за ним
  9.   \\r? # возможно \r
  10.   \\n # и \n
  11.   )*+
  12.   )
  13.   [#]
  14.   (?P>probel) # хоть такая ссылка и называется рекурсивной, рекурсии фактически нет
  15.   define(?=[^a-z0-9_]|\$) # define справа от которого не символ или конец строки
  16.   # грамматика требует уточнения
  17.   (?:
  18.   \\\\[^\\r\\n] | # что-то экранированное, но не переводы строк, или
  19.   \\\\\\r?\\n | # экранированный перевод строки, или
  20.   [^\\r\\n] # любой символ кроме перевода строки
  21.   )*+
  22.   \$ # конец строки или текста
  23.  
  24. HEREDOC;
  25.  
  26. echo preg_replace("/$RE/xum", "<span style='color:white;background-color:blue'>\n$0\n</span>", $text);
  27.  
  28. ?>
Success #stdin #stdout 0.01s 20520KB
stdin
sfs
          
        \
    #       \
           define sdf\
        dsfdsf\
        sdfsdf\\
   sdf #define
        #define
stdout
sfs
          
<span style='color:white;background-color:blue'>
        \
    #       \
           define sdf\
        dsfdsf\
        sdfsdf\\
</span>
   sdf #define
<span style='color:white;background-color:blue'>
        #define
</span>