删除注释时无法维护代码结构

时间:2019-05-19 06:12:41

标签: java regex scala comments

我正在尝试替换所有类型的注释(单行,内联和多行)。当///* */之间的任何引号之间都没有出现""""""""时,初始正则表达式绝对可以正常工作。当我稍微修改正则表达式以处理和排除引号之间//的出现时,它也会使初始代码结构失效并弄乱。

这是我最初的正则表达式(Regex:1):(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)

以下是我经过调整的正则表达式,以尝试处理引号内的单行注释(Regex:2):(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|[^\"](?://.*)[^\"]

请考虑以下示例数据:

// Comment 1
/* Multiline comments
ends here */  Some text
Random statement // something else
import something..
import something else /* few random stuff
that goes on */ /* Lets try this again */
Text to show
val tryThis = "  something // else "
val tryAgain = "12345" 
val again = " /* kskokds // */ "

Regex的实际结果:1 =>

  Some text
Random statement 
import something..
import something else  
Text to show
val tryThis = "  something 
val tryAgain = "12345" 
val again = "  "

Regex的实际结果:2 =>

// Comment 1
  Some text
Random statementimport something..
import something else  
Text to show
val tryThis = "  somethingval tryAgain = "12345" 
val again = "  "

预期结果=>

  Some text
Random statement 
import something..
import something else  
Text to show
val tryThis = "  something // else "
val tryAgain = "12345" 
val again = " /* kskokds // */ "

1 个答案:

答案 0 :(得分:2)

我现在是第一个发布指向该著名问题的链接的人: RegEx match open tags except XHTML self-contained tags

一个严肃的答案是

  

我认为这里的缺点是HTML是Chomsky Type 2语法   (无上下文语法),而RegEx是Chomsky Type 3语法(常规   语法)。由于类型2语法从根本上比语法   类型3语法(请参阅Chomsky层次结构),在数学上是   无法使用RegEx解析XML。

Java注释的标准也不是上下文无关的语法。因此,有关解析html的所有内容都适用于此。