正则表达式给出编译器错误

本文关键字:错误 编译器 正则表达式 | 更新日期: 2023-09-27 17:57:10

<('w+)'b(?:'s+['w'-.:]+(?:'s*='s*(?:"[^"]*"|'[^']*'|['w'-.:]+))?)*'s*/?>'s*</'1's*>

以上是我从删除所有空 HTML 标签中获取的正则表达式?我正在尝试在下面使用相同的内容:-

string regex= @"<('w+)'b(?:'s+['w'-.:]+(?:'s*='s*(?:"[^"]*"|'[^']*'|['w'-.:]+))?)*'s*/?>'s*</'1's*>";

我收到许多编译错误,例如 - 在上面行本身的常量、无法识别的转义序列中换行。

有人可以帮助我指出我错过了什么吗?

正则表达式给出编译器错误

您需要

在字符串内使用双引号""

string regex= @"<('w+)'b(?:'s+['w'-.:]+(?:'s*='s*(?:""[^""]*""|'[^']*'|['w'-.:]+))?)*'s*/?>'s*</'1's*>";

正则表达式中有双引号需要加引号。

 string regex= @"<('w+)'b(?:'s+['w'-.:]+(?:'s*='s*(?:"[^"]*"|'[^']*'|['w'-.:]+))?)*'s*/?>'s*</'1's*>";

应该是

string regex= @"<('w+)'b(?:'s+['w'-.:]+(?:'s*='s*(?:'u0022[^'u0022]*'u0022|'[^']*'|['w'-.:]+))?)*'s*/?>'s*</'1's*>";

顺便说一句,由于<'/'1's*>这只会删除空间周围的平衡标签。 它将匹配<p> </p>但不<img src=bogus onerror=alert(1337)>.

即使您只想删除空间周围的平衡标签,请注意,这不会匹配所有此类标签。 具体来说,它不会匹配标签名称因大小写而异的标签:<p> </P> .

最后,它不会删除可传递的空标签:<i><b></b></i> -> <i></i>

单双引号(")必须在逐字字符串中用双双引号("")进行转义。

试试这个

string regex= @"<('w+)'b(?:'s+['w'-.:]+(?:'s*='s*(?:""[^""]*""|'[^']*'|['w'-.:]+))?)*'s*/?>'s*</'1's*>";