0

HTMLタグから著者名を抽出したい。タグは次のようになります。

<a href="http://somewhere.com">    Manfred    </a>

ただし、名前が長すぎる場合は、次のようになります。

<a title="floormanager004" href="http://somewhere.com">    floormanage...    </a>

両方のケースをカバーする次の正規表現があります。

~<a.*(title="(.{2,50})".*|>(.*))</a>~Usi

これは 2 番目のケースではうまく機能し、次のような 2 次元配列を返します。

array(2) {
  [0]=>
  string "title="floormanager004" href="http://somewhere.com">    floormanage...    "
  [1]=>
  string "floormanager004"
}

ただし、最初のケースでは、配列には追加の空のフィールドが含まれています。

array(2) {
  [0]=>
  string ">    Manfred    "
  [1]=>
  string ""
  [2]=>
  string "    Manfred    "
}

このフィールドが表示される理由と、それを取り除く方法を教えてください。

免責事項: 正規表現を使用してhtmlを解析する場合、非常に時間がかかり、これを行うべきではないことはわかっていますが、私の場合、XPATHなどよりも高速であることが証明されています。これについてコメントしないでください。

4

2 に答える 2

1

かっこで囲まれたビットが一致するものが何もない場合でも、正規表現全体で一致が成功するたびに、返される配列にすべてのかっこのセットに関連する値が含まれます。一部のキャプチャが空である可能性がある場合、コードでそのケースを検出して処理する必要があります。

于 2012-04-27T11:45:49.487 に答える
0

古き良きマンフレッドのタイトル属性がありません。

これは、次のような場合に機能します。

~<a.*>(.*)</a>~Usi

私はこれについて完全には理解できません。Stackoverflow で 2 番目に投票数の多い質問を参照してください。すべてを読むことをお勧めします:

正規表現は、XHTML 自己完結型タグを除く開始タグに一致します

于 2012-04-27T11:45:30.353 に答える