回答
我强烈建议只使用一个解析器一样的意见,但如果只是为了好玩 - 从我的头顶,你可以使用Ruby做这样的事情,假设你已经知道如何从文件中获取内容(请记住,这是非常粗糙,只是一个可能的指南 - prolly将无法工作开箱):
def one_liner_comment string
string.match /\/\*.*\*\//
end
def multi_liner_comment_start string
# if always checking for one_liner_comment in code would not need first !one_...
!one_liner_comment(string) && string.match(/\/\*/)
end
def multi_liner_comment_end string
# if always checking for one_liner_comment in code would not need first !one_...
!one_liner_comment(string) && string.match(/\*\//)
end
然后确定你只是在那里
if one_liner(string)
inline = true
elsif multi_liner_comment_start(string)
started = true
elsif started && multi_liner_comment_end(string)
ended = true
end
然后执行任何你想做的事情,从你的意见从这里开始。
if inline
# do whatever you want
one_liner = false
elsif started && !ended
# do whatever you want -> append or create new string
elsif started && ended
# do whatever you want -> append to string
started = false
ended = false
end
当然它也可以被清理......
尝试使用
\/\*(\*(?!\/)|[^*])*\*\/
捕捉单行和多行块注释。它搜索/*
后跟任意数量的任一:
- 一个
*
未后跟一个/
- 任何炭除了
*
然后闭合*/
一次。
您不需要在单独的分支中匹配空白字符; '[^ * /]'将它们覆盖。所有的'| \ s'确实会打开你[灾难性的回溯](http://www.regular-expressions.info/catastrophic.html)。此外,你需要从那里得到那个斜线,否则你的正则表达式将无法将注释与斜线内部的斜线相匹配。 – 2013-04-23 11:13:16
更改为您的建议(尽管OP表示,斜杠的评论似乎不成问题) – Campfire 2013-04-23 14:14:53
为什么不能'/\*(.(?!\*/*/))**\*/'?首先是一个'/ *',然后是任何不是'* /'后面的字符,然后''/'' – zzh1996 2017-01-23 08:49:39
- 1. 评论正则表达式
- 2. 正则表达式的C#评论
- 3. 查找和替换块中使用Java正则表达式模式评论
- 4. 正则表达式匹配PHP评论
- 5. 正则表达式匹配的评论
- 6. 以html风格查找字体样式的正则表达式
- 7. 正则表达式来查找公式
- 8. 正则表达式删除JavaScript的双斜杠(/)风格的评论
- 9. 在java风格评论上使用正则表达式时堆栈溢出
- 10. 正则表达式来查找邮编?
- 11. 寻找评论的Ruby正则表达式?
- 12. 正则表达式来匹配MySQL评论
- 13. 正则表达式来获得html没有评论
- 14. 正则表达式来匹配评论中的标记
- 15. PHP正则表达式来移除特定CSS评论
- 16. 查找正则表达式
- 17. 正则表达式来查找文本块(Javascript)中的URL
- 18. Python的正则表达式风格
- 19. c#正则表达式来查找“[数据]”和以下文本
- 20. 查找严格以$开头的单词,正则表达式C#
- 21. Javascript正则表达式 - 捕捉除C风格评论以外的所有内容
- 22. 正则表达式来创建Wiki风格的链接
- 23. 正则表达式来匹配来自Facebook的帖子和评论的句子
- 24. C#正则表达式编号格式
- 25. 使用正则表达式来评估搜索查询
- 26. 正则表达式删除C风格的多行注释
- 27. C语言的Perl风格正则表达式
- 28. VBScript正则表达式 - 查找模式之间的数据块
- 29. 正则表达式来找到this.Apple
- 30. 正则表达式来找到全名
如果'/ *'在同一行和'//'后面,这意味着它不会开始评论? – Patashu 2013-04-23 03:04:46
不,我不需要处理这种情况 – linquize 2013-04-23 03:07:15
除了使用正则表达式,如果你想全力以赴,你可以使用语言解析器和C(或其他)语言语法。例子是yacc,javacc,antlr – 2013-04-23 03:41:15