为什么这个注释Regex是错误的?
“/*”[^*/]*“*/” 它匹配第一个/*字符,然后等待除*/字符以外的任何字符,然后当它获得*/字符时,它将匹配整个正则表达式,但对于此注释,例如: /*布鲁诺/布拉加*/ 有人能告诉我为什么不匹配吗? 多谢各位 为什么这个注释Regex是错误的 这是由于正则表达式存在一些问题:为什么这个注释Regex是错误的?,regex,comments,Regex,Comments,“/*”[^*/]*“*/” 它匹配第一个/*字符,然后等待除*/字符以外的任何字符,然后当它获得*/字符时,它将匹配整个正则表达式,但对于此注释,例如: /*布鲁诺/布拉加*/ 有人能告诉我为什么不匹配吗? 多谢各位 为什么这个注释Regex是错误的 这是由于正则表达式存在一些问题: 里面所有不必要的引号“ 当你用否定符号启动一个字符类: [^ ] /代码>它否定了它中的每一个,在你的例子中它也会否定空间,因为你已经把它包含进去了。此外,字符 /存在于输入字符串的中间,只有当它在“上下文中遵循
“
*/
*
是一个特殊字符,应该转义。这同样适用于/
/*
之后的空格(输入字符串/*bruno…
不包含此类空格)*/
\/\*[^\*]*\*\/
看
跟进Luis的评论:如果您想在评论中允许
*
符号,可以使用:
\/\*(.*?)\*\/
请参见匹配注释的正确正则表达式(允许除
*/
序列之外的所有内容,您必须首先允许除*
或*
之外的任何字符后跟除/
以外的任何内容,因此
/\*([^\*]|\*[^/])*\*/
看
应该做这项工作(请记住,在演示中,regexp分隔符是
/
,因此它们是用反斜杠转义的,也许您必须这样做才能在代码中转义。IMHO,您忘记了*
是一个特殊字符,必须转义才能与文本匹配。请尝试使用/\*(?:(?!*/\124;/\*/\*)[\ s\s])*\*/
,或更简单的/\*[\s\s]*?\*/
。如果您的注释中没有换行符,请尝试使用/\*.*?\*/
。如果任何regexp对您有效,请让我知道。@luiscolardo true,但没有这样的要求。如果OP认为*
符号可能是注释的一部分,则应将此要求添加到问题中:)但是,假设他希望得到正确的答案,当他看到包含*
会使整个匹配字符串无效时,就不会再处理这个问题。即使没有这样指定,C语言注释也允许将*
字符放入其中。该编辑将使其接受“/*bla bla//bla bla*/”作为whole comment,不是中间有空格的两个注释。请看一下我的解决方案,因为我也回答了这个问题。对不起,我没有看到组末尾的?
。错误是我的。