已解决(请参阅“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属性,接着是下一个。
但我认为这些事情应该被[^=>].*?'
很困惑。
答案 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。