使用regex查找包含撇号的html属性(记事本++)

时间:2014-01-06 03:43:44

标签: html regex notepad++

已解决(请参阅“justhalf”的第一条评论)

**

我知道,使用RegEx搞乱HTML是邪恶的。

然而,我的手段和专有技术受到限制,我不知道还能做什么。

情况如下:

我的网站包含大约5000页。

我想修复一些错误:

这样的事情: <a href="foo" alt='The queen's attendants ate the cake.' id='yee'>

此示例中的错误是HTML属性“alt”的值包含在撇号中,但文本也包含撇号。 应该有很多这种类型的错误。我想找到所有并纠正它们。

我尝试了这种模式:{ [a-zA-Z].*?='[^'].*?'[^=>].*?'}

即:空格,后跟HTML属性([a-zA-Z].*?)的名称,后跟=和属性的值(='[^'].*?')。到此为止,这应该匹配有效的HTML属性。 对于有效的HTML属性,现在从此处开始的将是空格,后跟下一个属性,或者右括号&gt;对于HTML标记。 因此,为了匹配错误的HTML属性,如上所述,我继续使用([^=>].*?')搜索模式,即不包含=或&gt;的字符串,后跟'。换句话说,下一个撇号是之前的 any =或&gt;登录。

根据我的理解,此应该排除有效的HTML属性,后面跟着下一个HTML属性或结束&gt;对于HTML标记。 但不知何故,它并没有真正起作用。

使用这种搜索模式,我发现这样的事情:

class='noteTag' href='

id='fnt-14' name='

所以......有效的HTML属性,接着是下一个。

但我认为这些事情应该被[^=>].*?'

排除

很困惑。

1 个答案:

答案 0 :(得分:1)

改编@justhalf回答:

正则表达式[a-zA-Z]*?='[^']*'[^=>]*'可用于容纳这些模式:

<a href="foo" alt='The queen's attendants ate the cake.' id='yee'>
<a href="foo" alt='The queens''' attendants ate the cake.' id='yee'>
<a href="foo" alt='The queen's attendants ate the cake.' >
<a href="foo" alt='The queen's attendants ate the cake.'>
<a href="foo" id='yee' alt='The queen's attendants ate the cake.'>

注意也可以解决多个单引号 有关说明,请参阅@justhalf comment