这些不保留格式


首选方式(如果第 1 组不匹配,则产生 NULL)

在 golang 操场上有效 -


     # https://play.golang.org/p/yKtPk5QCQV

     # fmt.Println(reg.ReplaceAllString(txt, "$1"))

     # (?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/|//[^\n]*(?:\n|$))|("[^"\\]*(?:\\[\S\s][^"\\]*)*"|'[^'\\]*(?:\\[\S\s][^'\\]*)*'|[\S\s][^/"'\\]*)


     (?:                              # Comments 

          /\*                              # Start /* .. */ comment

          [^*]* \*+

          (?: [^/*] [^*]* \*+ )*

          /                                # End /* .. */ comment

       |  

          //  [^\n]*                       # Start // comment

          (?: \n | $ )                     # End // comment

     )

  |  

     (                                # (1 start), Non - comments 

          "

          [^"\\]*                          # Double quoted text

          (?: \\ [\S\s] [^"\\]* )*

          "

       |  

          '

          [^'\\]*                          # Single quoted text

          (?: \\ [\S\s] [^'\\]* )*

          ' 

       |  [\S\s]                           # Any other char

          [^/"'\\]*                        # Chars which doesn't start a comment, string, escape, or line continuation (escape + newline)

     )                                # (1 end)

替代方式(第 1 组始终匹配,但可能为空)

在 golang 游乐场中有效 -


 # https://play.golang.org/p/7FDGZSmMtP

 # fmt.Println(reg.ReplaceAllString(txt, "$1"))

 # (?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/|//[^\n]*(?:\n|$))?((?:"[^"\\]*(?:\\[\S\s][^"\\]*)*"|'[^'\\]*(?:\\[\S\s][^'\\]*)*'|[\S\s][^/"'\\]*)?)     


 (?:                              # Comments 

      /\*                              # Start /* .. */ comment

      [^*]* \*+

      (?: [^/*] [^*]* \*+ )*

      /                                # End /* .. */ comment

   |  

      //  [^\n]*                       # Start // comment

      (?: \n | $ )                     # End // comment

 )?

 (                                # (1 start), Non - comments 

      (?:

           "

           [^"\\]*                          # Double quoted text

           (?: \\ [\S\s] [^"\\]* )*

           "

        |  

           '

           [^'\\]*                          # Single quoted text

           (?: \\ [\S\s] [^'\\]* )*

           ' 

        |  [\S\s]                           # Any other char

           [^/"'\\]*                        # Chars which doesn't start a comment, string, escape, or line continuation (escape + newline)

      )?

 )                                # (1 end)

Cadilac - 保留格式


(不幸的是,这不能在 Golang 中完成,因为 Golang 不能做断言)已

发布,以防您转移到不同的正则表达式引擎。


     # raw:   ((?:(?:^[ \t]*)?(?:/\*[^*]*\*+(?:[^/*][^*]*\*+)*/(?:[ \t]*\r?\n(?=[ \t]*(?:\r?\n|/\*|//)))?|//(?:[^\\]|\\(?:\r?\n)?)*?(?:\r?\n(?=[ \t]*(?:\r?\n|/\*|//))|(?=\r?\n))))+)|("[^"\\]*(?:\\[\S\s][^"\\]*)*"|'[^'\\]*(?:\\[\S\s][^'\\]*)*'|(?:\r?\n|[\S\s])[^/"'\\\s]*)

     # delimited:  /((?:(?:^[ \t]*)?(?:\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\/(?:[ \t]*\r?\n(?=[ \t]*(?:\r?\n|\/\*|\/\/)))?|\/\/(?:[^\\]|\\(?:\r?\n)?)*?(?:\r?\n(?=[ \t]*(?:\r?\n|\/\*|\/\/))|(?=\r?\n))))+)|("[^"\\]*(?:\\[\S\s][^"\\]*)*"|'[^'\\]*(?:\\[\S\s][^'\\]*)*'|(?:\r?\n|[\S\s])[^\/"'\\\s]*)/


     (                                # (1 start), Comments 

          (?:

               (?: ^ [ \t]* )?                  # <- To preserve formatting

               (?:

                    /\*                              # Start /* .. */ comment

                    [^*]* \*+

                    (?: [^/*] [^*]* \*+ )*

                    /                                # End /* .. */ comment

                    (?:                              # <- To preserve formatting 

                         [ \t]* \r? \n                                      

                         (?=

                              [ \t]*                  

                              (?: \r? \n | /\* | // )

                         )

                    )?

                 |  

                    //                               # Start // comment

                    (?:                              # Possible line-continuation

                         [^\\] 

                      |  \\ 

                         (?: \r? \n )?

                    )*?

                    (?:                              # End // comment

                         \r? \n                               

                         (?=                              # <- To preserve formatting

                              [ \t]*                          

                              (?: \r? \n | /\* | // )

                         )

                      |  (?= \r? \n )

                    )

               )

          )+                               # Grab multiple comment blocks if need be

     )                                # (1 end)


  |                                 ## OR


     (                                # (2 start), Non - comments 

          "

          [^"\\]*                          # Double quoted text

          (?: \\ [\S\s] [^"\\]* )*

          "

       |  

          '

          [^'\\]*                          # Single quoted text

          (?: \\ [\S\s] [^'\\]* )*

          ' 

       |  

          (?: \r? \n | [\S\s] )            # Linebreak or Any other char

          [^/"'\\\s]*                      # Chars which doesn't start a comment, string, escape,

                                           # or line continuation (escape + newline)

     )                                # (2 end)