我不太擅长正则表达。我试图用Netbeans中的文本替换大型HTML文档。有几个这样的标签:
<canvas width="62" height="23" style="width: 62px; height: 23px; top: 1px; left: 1px; ">
<canvas width="62" height="23" style="width: 62px; height: 23px; top: 1px; left: 1px; ">
<canvas width="67" height="23" style="width: 67px; height: 23px; top: 1px; left: 1px; ">
我想用空格或空值替换这些标记以删除它们。
我试过
^<canvas width="[0-9]*" height="[0-9]*" style="width: [0-9]*px; height: [0-9]*px; top: [0-9]*px; left: [0-9]*px; ">
但它没有帮助。
有人能给我一个解决方案吗?
答案 0 :(得分:8)
使用正则表达式解析html是个坏主意,但如果你必须...
尝试使用正则表达式组:
^<canvas width="([0-9]*)" height="([0-9]*)" style="width: ([0-9]*px); height: ([0-9]*px); top: ([0-9]*px); left: ([0-9]*px); ">$
所以你可以用$ 1等来引用第一组。
如果您使用^和$
,请记住多行标记答案 1 :(得分:0)
只有当行没有前面的空格时,表达式才有效。 请改用此表达式:
^[ \t]?<canvas width="[0-9]*" height="[0-9]*" style="width: [0-9]*px; height: [0-9]*px; top: [0-9]*px; left: [0-9]*px; ">
[编辑] 如果表达式前面有文本,则需要在开头删除插入符号(^)。
答案 2 :(得分:0)
我认为你的正则表达式看起来很好,除了行首边界匹配器^
,它强制搜索从行的开头开始。因此,如果您的目标标记没有开始一行,匹配器将找不到它们。
如果您的目标标记可以在文档中的任何位置找到,并且您的正则表达式无法匹配您想要保留的任何内容,请删除^
边界匹配器,然后测试以查看它是否正常工作在使用“替换”或“全部替换”之前使用“查找”。
答案 3 :(得分:0)
我找到了解决方案。
我试过这个并且它工作正常。
<canvas (?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>
它可以用于任何html标签代替&#34; canvas&#34;就我而言。