-1

私は、自己終了タグが正しく行われていないかどうかをチェックしたい 6 つの html タグを持っています。タグは次のとおり<input/><br/><hr/><img/><link/><meta/>です。ページがxhtmlであるため、終了タグの前にスペースがないことも探しています。基本的に、自己閉鎖がないもの、または閉鎖する場合はその前にスペースがあるものを見つけたいと思っています。

現在、タグの 1 つ (input) に注目しています。すべてではなく一部をピックアップします。たとえば、何をすべきかをピックアップし<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" を一致させてから、できるだけ多くの文字を一致させ、最後の文字を a 以外にして/から、終了文字を一致させているように見えます>

の場合は<input type='submit' value='Save' /></td></tr>欲張りなので最後まで走ってくれます>。これはたまたまの>ですtd(grepがで終わるため.

少しハックな代替品として(これを行うためのよりエレガントな方法があると確信しています..):

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

(関連性がある場合は grep 2.6.3/cygwin )

これは大まかに訳すと: " " で始まり、" <input" で終わるものを>(怠惰に) 取得し、振り返って、最後の 2 番目の最後の文字>がスペースではないこと、または最後の文字がスペースではないことを確認します。近いスラッシュ。

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 を解析することはお勧めできません

ただし、各行にタグが 1 つしかないように HTML がフォーマットされている場合は、grep '<input' * | grep -v " />"

于 2013-01-12T17:55:03.743 に答える
0

なぜピックアップする必要があるの<input type="text" name="name" id="name"/>ですか?それは正しく閉じられたタグです。

于 2013-01-12T16:39:04.737 に答える