3

我不太擅长正则表达式。我试图将 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; ">

但这没有帮助。

谁能给我一个解决方案?

4

4 回答 4

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 等来引用第一组。

如果您使用 ^ 和 $,请记住多行标志

于 2012-08-01T07:35:57.473 回答
0

我找到了解决方案。

我试过了,效果很好。

<canvas (?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>

在我的例子中,它可以用于任何 html 标签来代替“canvas”。

于 2012-08-02T17:46:40.017 回答
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; ">

[编辑] 如果表达式前面有文本,则需要删除开头的插入符号 (^)。

于 2012-08-01T09:00:58.683 回答
0

我认为您的正则表达式看起来不错,除了行首边界匹配器^强制搜索从行首开始。因此,如果您的目标标签没有开始一行,则匹配器将找不到它们。

如果您的目标标签可以在文档中的任何位置找到,并且您的正则表达式没有机会匹配您想要保留的任何内容,请摆脱^边界匹配器,然后在使用“之前使用“查找”测试它是否有效替换”或“全部替换”。

于 2012-08-01T19:23:06.973 回答