1

私のセットアップ:

index.php:

<?php
$page = file_get_contents('a.html');
$arr = array();
preg_match('/<td class=\"myclass\">(.*)\<\/td>/s',$page,$arr);
print_r($arr);
?>

a.html:

...other content
<td class="myclass"> 
    THE 
  CONTENT 
</td>
other content...

出力:

Array
(
    [0] => Array
        (
        )
)

index.php の 4 行目を次のように変更すると:

preg_match('/<td class=\"myclass\">(.*)\<\/t/s',$page,$arr);

出力は次のとおりです。

Array
(
    [0] => <td class="myclass">
     THE 
   CONTENT
</t
    [1] => 
     THE 
   CONTENT
)
 

何が悪いのかわかりません。<td class="myclass">との間のコンテンツを一致させるのを手伝ってください</td>

4

3 に答える 3

2

あなたのコードは機能しているようです。正規表現を編集して、別のセパレータを使用し、より明確なビューを取得しました。HTML に複数の myclass TD がある場合は、ungreedy 修飾子を使用することをお勧めします。

コードを操作してエラーを追加しない限り、あなたが指摘した「配列の配列」の動作を再現できませんでした-下部を参照してください。

<?php
        $page = <<<PAGE
        ...other content
        <td class="myclass">
            THE
          CONTENT
        </td>
        other content...
PAGE;

        preg_match('#<td class="myclass">(.*)</td>#s',$page,$arr);
        print_r($arr);
?>

予想どおり、次のように返されます。

Array
(
    [0] => <td class="myclass">
            THE
          CONTENT
        </td>
    [1] =>
            THE
          CONTENT

)

以下のコードはあなたのものに似ていますが、同じエラーを引き起こすように変更されています. ただし、これを行った可能性は低いようです。正規表現は一致しないように変更され、結果の空の配列はの代わりに$arr[0]$arrに格納されます。

preg_match('#<td class="myclass">(.*)</ td>#s',$page,$arr[0]);

あなたが観察したのと同じエラーを返します:

Array
(
    [0] => Array
        (
        )

)

正規表現を使用すると、観察したのと同じ動作を再現できます ( で動作しますが</t、 では動作しません</td>) が、HTML を</t d>. 同じ出力を取得したい場合は、$arr[0]代わりに書き込む必要があります。$arr

于 2012-10-26T16:30:51.003 に答える
1

preg_matchの 3 番目のパラメーターは一致であり、一致が含まれ、他の要素がキャプチャされたパターンを表示することを理解していますか。

http://ca3.php.net/manual/en/function.preg-match.php

一致が提供された場合は、検索結果が入力されます。$matches[0] には完全なパターンに一致したテキストが含まれ、$matches[1] には最初にキャプチャされた括弧で囲まれたサブパターンに一致したテキストが含まれます。

このコード preg_match('/<td class=\"myclass\">(.*)\<\/t/s',$page,$arr);

適用時

...other content
<td class="myclass"> 
    THE 
  CONTENT 
</td>
other content...

$arr[0] に一致を返し、(.*) の結果を $arr[1] に返します。この結果は正しいです: [1] にあなたのコンテンツがあります

Array
(
    [0] => <td class="myclass">
    THE
  CONTENT
</t
    [1] => 
    THE
  CONTENT

例 2

<?php
header('Content-Type: text/plain');
$page = 'A B C D E F';
$arr = array();
preg_match('/C (D) E/', $page, $arr);
print_r($arr);

出力例

Array
(
    [0] => C D E  // This is the string found
    [1] => D      // this is what I wanted to look for and extracted out of [0], the matched parenthesis
)
于 2012-10-26T16:56:44.943 に答える
0

あなたの正規表現は正しいようです。preg_match の構文は次のようになっていませんか?

preg_match('/<td class=\"myclass\">(.*)\<\/td>/s',$page,$arr);

|正規表現のor

于 2012-10-26T16:10:06.743 に答える