1

ページ内のすべてのタグを取得するための Regex クエリがここにあります。次のようになります。

preg_match_all('%<tr[^>]++>(.*?)</tr>%s', $pageText, $rows);

問題は、返された配列でページ上のすべてのタグを見つけますが、実際には多次元配列を返します。最初の配列の各エントリには、すべての一致の配列が含まれています。言い換えれば、最初の配列の複数の同一のコピー、つまり私が実際に必要とするものを渡します。

助けてください?

編集: また関連: このアプリケーションに DOM を使用することは許可されていません。

4

2 に答える 2

0

これを試してください:

preg_match_all('~<tr(?:\\s+[^>]*)?>(.*?)</tr>~si', $pageText, $rows);
var_dump($rows[1]);

% を使用して正規表現をラップしないでください。これは何らかの形でprintf()同様の機能のために予約されている文字であり、パターンと一緒に、%sまたは%iパターンの最後にあると、非常に混乱する可能性があります。

于 2012-10-29T03:30:40.867 に答える
0

あなたが実際に求めているのはリストであり、これには再びブロブ$row[0]が冗長に含まれています。内部データ<tr>...</tr>のみを気にする場合は、完全一致をリセットするために使用します。(.*?)\K

preg_match_all('=<tr\b[^>]*+>(.*?)</tr>\K=s', $pageText, $rows);

$row[0]完全に取り除くことは不可能です。無視して、$row[1]単独で使用する必要があります。

于 2012-10-29T03:35:43.660 に答える