用于标识注释的正则表达式是什么(即/ *和* /之间的所有字符,包括这些注释标记本身,以及多行)?
例如,拾取:
/* asdf asdf
asdf asdfasdfasdfasd
asdfasdf
*/
答案 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?。