为什么这个 Comments Regex 是错误的?

Why is this Comments Regex wrong?

"/* "[^* /]* "* /"

它匹配第一个 /* 然后它等待除 */ 之外的任何字符,然后当它得到 */ 它将匹配整个正则表达式,但是对于这个注释例如:

/*bruno / braga */

谁能告诉我为什么 / 不匹配? 谢谢。

Why is this Comments Regex wrong?

这是由于正则表达式的一些问题:

  1. 里面所有不必要的引号"
  2. 当你以否定符号开始一个字符 class 时:[^] 它否定其中的所有内容,在你的示例中它也会否定 space 因为你已经包含它in. 此外,字符 / 存在于输入字符串的中间,您可能希望仅当它在 "ending the comment" - [=16= 的上下文中跟随 * 时才允许它].
  3. 正如上面评论中已经提到的 stribizhev - * 是一个特殊字符,应该被转义。同样适用于 /
  4. 正则表达式中 /* 之后的 space(输入字符串 /*bruno... 不包含这样的 space)
  5. 最后一个星号和关闭评论的斜线之间的space:* /

综上所述,正则表达式应更正为:

\/\*[^\*]*\*\/

DEMO


跟进 Luis 的评论:如果您想在评论中使用 * 符号,您可以使用:

\/\*(.*?)\*\/

DEMO

一个正确的正则表达式来匹配评论(允许内部除了 */ 序列之外的所有字符,您必须首先允许除 * 之外的任何字符,或者 * 后跟除一个/,所以

/\*([^\*]|\*[^/])*\*/

Demonstration

应该完成这项工作(请记住,在演示中,正则表达式定界符是 /,因此它们用反斜杠转义,也许您必须这样做才能在代码中转义。