-1

我有六个 html 标签,我关心检查自闭标签是否正确完成。标签是:<input/><br/><hr/><img/><link/><meta/>。我也在寻找它在结束标记之前没有空格,因为页面是 xhtml。基本上我想找到那些没有自动关闭功能的,或者如果有的话,它前面有一个空间。

现在我只关注其中一个标签(输入)。它收集了一些但不是全部。例如,它会选择<input type='submit' value='Save'>它应该做的事情。但它不接<input type="text" name="name" id="name"/>。它还可以拾取正确的自闭合标签,例如<input type='submit' value='Save' /></td></tr>

我的 grep 是:

grep "<input(.*[^/])>." *

任何想法为什么?

4

3 回答 3

0

为什么要捡起来<input type="text" name="name" id="name"/>?这是一个正确关闭的标签。

于 2013-01-12T16:39:04.737 回答
0

我认为您当前的正则表达式不起作用,因为它与整行匹配。只是盯着它,看起来你正在匹配开始字符串 " <input" 然后尽可能多的字符,最后一个字符不是 a /,然后是结束字符>

<input type='submit' value='Save' /></td></tr>贪婪的情况下,它会一直运行到最后>一个有效的。恰好是>for the td(因为你的 grep 以 a 结束.

作为一个 hack-y 替代品(我确信有一种更优雅的方式来做到这一点..):

grep -P -o "<input.*?(?<=( .)|([^/]))>" test.html

(如果相关,则为 grep 2.6.3/cygwin)

大致翻译为:让我以“ <input”开头,然后以“ >”结尾(懒惰地),然后回头检查是否关闭前的倒数第二个字符>不是空格,或者最后一个字符不是一个斜线。

如果 test.html 有(为了论证):

<input type='submit' value='Save' /></td></tr>
<input type="text" name="name" id="name"/>
<input type='submit' value='Save'>
<a><input type="blah" /></a>
<input/>
<input></i>

输出是:

<input type='submit' value='Save' />
<input type='submit' value='Save'>
<input type="blah" />
<input>

更一般地说,如果您要测试是否符合 xhtml,lxml会让您的生活更轻松吗?

于 2013-01-12T17:54:08.297 回答
0

不建议使用正则表达式解析 HTML 。

但是,如果您的 HTML 被格式化为每行只有一个标签,也许您可​​以逃脱grep '<input' * | grep -v " />"

于 2013-01-12T17:55:03.743 回答