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

时间:2011-05-19 02:29:34

标签: c# regex

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

以上是我从Remove all empty HTML tags?获取的正则表达式 而我正在尝试使用下面相同的内容: -

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

我得到了许多编译错误,比如 - 在上面一行本身的常量,无法识别的转义序列中的换行符。

有人能指出我错过了什么来帮助我吗?

3 个答案:

答案 0 :(得分:2)

您需要在字符串中使用""作为双引号:

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

答案 1 :(得分:1)

regexp中有双引号,需要引用。

 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> - &gt; <i></i>

答案 2 :(得分:1)

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

试试这个

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