我正在尝试将C样式注释与文件匹配,但前提是注释不是以@
引入的某些标签开头
例如来自
/* some comment to match */
/* another comment.
this should match also */
/*@special shouldn't match*/
这是否只能使用正则表达式?
我正在尝试使用正则表达式的JavaScript实现。
答案 0 :(得分:4)
/\*\s*(?!@)(?:(?!\*/).)*\*/
分解为:
/\* // "/*" \s* // optional space (?!@) // not followed by "@" (?: // don't capture... (?!\*/). // ...anything that is not "*/" )* // but match it as often as possible \*/ // "*/"
在“global”和“dotall”模式下使用(例如,点也应与新行匹配)
通常的警告词:与使用正则表达式执行的所有解析作业一样,这将在嵌套模式和输入损坏时失败。
emk points out a nice example(否则有效)输入将导致此表达式中断。这无法帮助,正则表达式不适用于解析。如果你肯定这样的事情在你的输入中永远不会发生,那么正则表达式可能仍适用于你。
答案 1 :(得分:1)
你可以从这样的事情开始:
/\*[^@]
但总的来说,你不会看到将C风格的评论与正则表达式相匹配,因为讨厌的角落情况。考虑:
"foo\" /* " " */ "
该代码中没有任何注释(它是两个字符串文字的编译时串联),但如果没有真正的解析器,你将无法解析它。 (从技术上讲,你可以使用正则表达式,因为你只需要一个简单的有限状态机。但这是一个非常恶心的正则表达式。)
答案 2 :(得分:0)
使用否定前瞻