为什么这个 Comments Regex 是错误的?
Why is this Comments Regex wrong?
"/* "[^* /]* "* /"
它匹配第一个 /* 然后它等待除 */ 之外的任何字符,然后当它得到 */ 它将匹配整个正则表达式,但是对于这个注释例如:
/*bruno / braga */
谁能告诉我为什么 / 不匹配?
谢谢。
Why is this Comments Regex wrong?
这是由于正则表达式的一些问题:
- 里面所有不必要的引号
"
- 当你以否定符号开始一个字符 class 时:
[^]
它否定其中的所有内容,在你的示例中它也会否定 space 因为你已经包含它in. 此外,字符 /
存在于输入字符串的中间,您可能希望仅当它在 "ending the comment" - [=16= 的上下文中跟随 *
时才允许它].
- 正如上面评论中已经提到的 stribizhev -
*
是一个特殊字符,应该被转义。同样适用于 /
- 正则表达式中
/*
之后的 space(输入字符串 /*bruno...
不包含这样的 space)
- 最后一个星号和关闭评论的斜线之间的space:
* /
综上所述,正则表达式应更正为:
\/\*[^\*]*\*\/
见DEMO
跟进 Luis 的评论:如果您想在评论中使用 *
符号,您可以使用:
\/\*(.*?)\*\/
见DEMO
一个正确的正则表达式来匹配评论(允许内部除了 */
序列之外的所有字符,您必须首先允许除 *
之外的任何字符,或者 *
后跟除一个/
,所以
/\*([^\*]|\*[^/])*\*/
应该完成这项工作(请记住,在演示中,正则表达式定界符是 /
,因此它们用反斜杠转义,也许您必须这样做才能在代码中转义。
"/* "[^* /]* "* /"
它匹配第一个 /* 然后它等待除 */ 之外的任何字符,然后当它得到 */ 它将匹配整个正则表达式,但是对于这个注释例如:
/*bruno / braga */
谁能告诉我为什么 / 不匹配? 谢谢。
Why is this Comments Regex wrong?
这是由于正则表达式的一些问题:
- 里面所有不必要的引号
"
- 当你以否定符号开始一个字符 class 时:
[^]
它否定其中的所有内容,在你的示例中它也会否定 space 因为你已经包含它in. 此外,字符/
存在于输入字符串的中间,您可能希望仅当它在 "ending the comment" - [=16= 的上下文中跟随*
时才允许它]. - 正如上面评论中已经提到的 stribizhev -
*
是一个特殊字符,应该被转义。同样适用于/
- 正则表达式中
/*
之后的 space(输入字符串/*bruno...
不包含这样的 space) - 最后一个星号和关闭评论的斜线之间的space:
* /
综上所述,正则表达式应更正为:
\/\*[^\*]*\*\/
见DEMO
跟进 Luis 的评论:如果您想在评论中使用 *
符号,您可以使用:
\/\*(.*?)\*\/
见DEMO
一个正确的正则表达式来匹配评论(允许内部除了 */
序列之外的所有字符,您必须首先允许除 *
之外的任何字符,或者 *
后跟除一个/
,所以
/\*([^\*]|\*[^/])*\*/
应该完成这项工作(请记住,在演示中,正则表达式定界符是 /
,因此它们用反斜杠转义,也许您必须这样做才能在代码中转义。