什么是用于标识注释的正则表达式(即在多行之间的/ *和* /之间)

时间:2011-02-25 01:28:35

标签: regex

用于标识注释的正则表达式是什么(即/ *和* /之间的所有字符,包括这些注释标记本身,以及多行)?

例如,拾取:

/* asdf asdf 
asdf asdfasdfasdfasd
asdfasdf
   */

3 个答案:

答案 0 :(得分:2)

(?:/\*(?:(?:[^*]|\*(?!/))*)\*/)

这最初是MySQL解析器的一部分,旨在剥离注释而不将其从字符串中删除:

("(?:(?:(?:\\.)|[^"\\\r\n])*)"|'(?:(?:(?:\\.)|[^'\\\r\n])*)'|`(?:(?:(?:\\.)|[^`\\\r\n])*)`)|((?:-- .*)|(?:#.*)|(?:/\*(?:(?:[^*]|\*(?!/))*)\*/))

将其替换为捕获组1以放回字符串。

答案 1 :(得分:2)

这是使用正则表达式解决的非常难题(因为很难考虑所有边缘情况)。如果这是您正在解析的编程语言,我强烈建议您使用构建的解析器来解析该语言。

答案 2 :(得分:2)

不是那么简单,例如:

/* multiline comment
   f("end marker inside literal string */");
*/

请参阅How do I use a regular expression to strip C style comments from a file?