0

大量のデータを抽出し、その結果を変数に格納するコードがあります。reg式を実行しようとすると、一致するものが見つかりません。しかし、echoステートメントを実行して変数を画面にダンプし、画面からすべてのデータを変数にコピーして、新しい変数で正規表現を実行すると、80以上の一致を見つけることができます。

現在使用しているコードは次のとおりです。

  require 'HPVC.php';

  $hp = new HPVC('10.14.3.23', '123', '');
  echo "<br>Attempting connection";

  $hp->connect();
  echo "<br>connection succeeded";
  $data = $hp->showPSAll();
  echo "<br>closing connection...";
  $hp->close();
  echo "<br>connection closed.";

  print_r($data);
  $pattern = '/(\w+)(\s*)(\w+\/\w+|\s+)(\s*)(\|)(\s*)(\w+)(\s*)(\w+)(\s*)(\w+|\s+)(\s*)(\w+)(\s*)(\w+)(\s*)(\w+)(\s*)(\d)/i';
  echo '<br>Number of matches: '.preg_match_all($pattern, $data, $matches, PREG_PATTERN_ORDER);

これがprint_rが部分的に与えるものです:(それは本当に本当に長いです!)

         connection closed. [24;1H [24;16H [24;1H [?25h [24;16H [24;16Hshow inter [24;16H [?25h [24;26H [24;26Hfaces brie [24;26H [?25h [24;36H [24;36Hf [24;36H [?25h [24;37H [24;0H E [24;1H [24;37H [24;1H [2K [24;1H [?25h [24;1H [1;24r [24;1H Status and Counters - Port Status | Intrusion MDI Flow Bcast Port Type | Alert Enabled Status Mode Mode Ctrl Limit ------ --------- + --------- ------- ------ ---------- ---- ---- ----- A1 100/1000T | No Yes Down 1000FDx Auto off 0 A2 100/1000T | No Yes Down 1000FDx Auto off 0 A3 100/1000T | No Yes Down 1000FDx Auto off 0 A4 100/1000T | No Yes Down 1000FDx Auto off 0 A5 100/1000T | No Yes Down 1000FDx Auto off 0 A6 100/1000T | No Yes Down 1000FDx Auto off 0 A7 100/1000T | No Yes Down 1000FDx Auto off 0 A8 100/1000T | No Yes Down 1000FDx Auto off 0 A9 100/1000T | No Yes Down 1000FDx Auto off 0 A10 100/1000T | No Yes Down 1000FDx Auto off 0 A11 100/1000T | No Yes Down 1000FDx Auto off 0 A12 100/1000T | No Yes Down 1000FDx Auto off 0 A13 100/1000T | No Yes Down 1000FDx Auto off 0 A14 100/1000T | No Yes Down 1000FDx Auto off 0 A15 100/1000T | No Yes Down 1000FDx Auto off 0 A16 100/1000T | No Yes Down 1000FDx Auto off 0 A17 100/1000T | No Yes Down 1000FDx Auto off 0 [24;1H [2K [24;1H [1;24r [24;1H A18 100/1000T | No Yes Down 1000FDx Auto off 0 A19 100/1000T | No Yes Down 1000FDx Auto off 0 A20 100/1000T | No Yes Down 1000FDx Auto off 0 A21 100/1000T | No Yes Down 1000FDx Auto off 0 A22 100/1000T | No Yes Down 1000FDx Auto off 0 A23 100/1000T | No Yes Down 1000FDx Auto off 0 A24 100/1000T | No Yes Down 1000FDx Auto off 0 B1 100/1000T | No Yes Down 1000FDx Auto off 0 B2 100/1000T | No Yes Down 1000FDx Auto off 0 B3 100/1000T | No Yes Down 1000FDx Auto off 0 B4 100/1000T | No Yes Down 1000FDx Auto off 0 B5 100/1000T | No Yes Down 1000FDx Auto off 0 B6 100/1000T | No Yes 

誰かがこの問題を手伝ってもらえますか?

4

2 に答える 2

2

生データを確認してください。コピーするものは、$dataにあるものとは少し異なります。この例としては、空白以外の文字が空白として表示され、空白としてコピーされる場合があります。バイナリ書き込みを使用して$dataをファイルにダンプしてから、16進エディタで文字を確認する必要がある場合があります。

私自身も過去に同様の問題に遭遇しました。

于 2012-08-17T20:47:07.657 に答える
1

最後の行を次のように置き換えます。

echo '<br>Number of matches: '.preg_match_all($pattern, print_r($data, true), $matches, PREG_PATTERN_ORDER);

print_r( beingの2番目のパラメーターtrueは、出力を画面に出力する代わりに返します。)

これで問題が解決した場合、他の人がコメントしているように、問題は$data文字列ではなく、配列、またはtoString編集時に編集されたオブジェクトであるということですprint_r

于 2012-08-17T20:48:36.360 に答える