<(\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*>";
我得到了许多编译错误,比如 - 在上面一行本身的常量,无法识别的转义序列中的换行符。
有人能指出我错过了什么来帮助我吗?
答案 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*>";