为什么这个注释Regex是错误的?

为什么这个注释Regex是错误的?,regex,comments,Regex,Comments,“/*”[^*/]*“*/” 它匹配第一个/*字符,然后等待除*/字符以外的任何字符,然后当它获得*/字符时,它将匹配整个正则表达式,但对于此注释,例如: /*布鲁诺/布拉加*/ 有人能告诉我为什么不匹配吗? 多谢各位 为什么这个注释Regex是错误的 这是由于正则表达式存在一些问题: 里面所有不必要的引号“ 当你用否定符号启动一个字符类: [^ ] /代码>它否定了它中的每一个,在你的例子中它也会否定空间,因为你已经把它包含进去了。此外,字符 /存在于输入字符串的中间,只有当它在“上下文中遵循

“/*”[^*/]*“*/”

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

/*布鲁诺/布拉加*/

有人能告诉我为什么不匹配吗? 多谢各位

为什么这个注释Regex是错误的

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

  • 里面所有不必要的引号
  • 当你用否定符号启动一个字符类:<代码> [^ ] /代码>它否定了它中的每一个,在你的例子中它也会否定空间,因为你已经把它包含进去了。此外,字符<代码> /<代码>存在于输入字符串的中间,只有当它在“上下文中遵循<代码> */COD>”时,你才可能不允许它。结束注释“-
    */
  • 正如上文注释中已经提到的Stribizev-
    *
    是一个特殊字符,应该转义。这同样适用于
    /
  • 正则表达式中位于
    /*
    之后的空格(输入字符串
    /*bruno…
    不包含此类空格)
  • 最后一颗星和关闭注释的斜线之间的空格:
    */
  • 综上所述,正则表达式应更正为:

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


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

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

    请参见

    匹配注释的正确正则表达式(允许除
    */
    序列之外的所有内容,您必须首先允许除
    *
    *
    之外的任何字符后跟除
    /
    以外的任何内容,因此

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


    应该做这项工作(请记住,在演示中,regexp分隔符是
    /
    ,因此它们是用反斜杠转义的,也许您必须这样做才能在代码中转义。

    IMHO,您忘记了
    *
    是一个特殊字符,必须转义才能与文本匹配。请尝试使用
    /\*(?:(?!*/\124;/\*/\*)[\ s\s])*\*/
    ,或更简单的
    /\*[\s\s]*?\*/
    。如果您的注释中没有换行符,请尝试使用
    /\*.*?\*/
    。如果任何regexp对您有效,请让我知道。@luiscolardo true,但没有这样的要求。如果OP认为
    *
    符号可能是注释的一部分,则应将此要求添加到问题中:)但是,假设他希望得到正确的答案,当他看到包含
    *
    会使整个匹配字符串无效时,就不会再处理这个问题。即使没有这样指定,C语言注释也允许将
    *
    字符放入其中。该编辑将使其接受“/*bla bla//bla bla*/”作为whole comment,不是中间有空格的两个注释。请看一下我的解决方案,因为我也回答了这个问题。对不起,我没有看到组末尾的
    。错误是我的。