次の文字列があります。
$teststring = "
Flow Link Back Mdix
ポート タイプ デュプレックス 速度 Neg ctrl 状態 圧力モード
fa1 100M-Copper -- -- -- -- ダウン -- --
fa2 100M-Copper -- -- -- -- ダウン -- --
fa3 100M-Copper -- -- -- -- ダウン -- - -
fa4 100M-Copper -- -- -- -- ダウン -- --
fa5 100M-Copper -- -- -- -- ダウン -- --
fa6 100M-Copper -- -- -- -- ダウン -- --
fa7 100M-Copper -- -- -- -- 下 -- --
fa8 100M-Copper -- -- -- -- 下 -- --
gi1 1G-Combo-C -- -- -- --下 - -
gi2 1G-Combo-C フル 100 有効 オフ アップ 無効 オフ
Flow Link
Ch Type Duplex Speed Neg control State
Po1 -- -- -- -- -- 存在しない Po2 -- -- -- -- -- 存在しない Po3 -- -- -- -- -- 存在しない Po4 -- -- -- -- --存在しない Po5 -- -- -- -- -- 存在しない Po6 -- -- -- -- -- 存在しない Po7 -- -- -- -- -- 存在しない Po8 -- -- -- -- - 現在ではない " ;
各フィールドを解析しようとしています。これまでのコードは次のとおりです。
$teststring = explode("<BR>", $teststring);
$vlandetailsArray = array();
foreach ($teststring as $vlandetails)
{
// port space type space duplex speed space neg
$pattern = '/([a-z0-9]*)(\s*)([a-z0-9\-]*)(\s*)[(Full)|(\-{2})](\s*)[(\-)+|(100)](\s*)[(--)*|(Enabled)](\s*)[(--)*|(Off)]/i';
if (preg_match($pattern, $vlandetails, $matches))
{
echo 'match 0: '.$matches[0].'<br>'; //0 index always returns all matches
}
これは以下を返します。
match 0: -------- ----
match 0: fa1 100M-Copper -- --
match 0: fa2 100M-Copper -- --
match 0: fa3 100M-Copper -- --
match 0: fa4 100M-Copper -- --
match 0: fa5 100M-Copper -- --
match 0: fa6 100M-Copper -- --
match 0: fa7 100M-Copper -- --
match 0: fa8 100M-Copper -- --
match 0: gi1 1G-Combo-C -- --
match 0: -------- ----
match 0: Po1 -- -- --
match 0: Po2 -- -- --
match 0: Po3 -- -- --
match 0: Po4 -- -- --
match 0: Po5 -- -- --
match 0: Po6 -- -- --
match 0: Po7 -- -- --
match 0: Po8 -- -- --
次のような行を取得しない理由がわかりません。
gi2 1G-Combo-C Full 100 Enabled Off Up Disabled Off
私が見逃している/間違っていることを教えてもらえますか?
ご参考までに。私はまだ正規表現をいじっているので、パターン (-{2}) を使用したり、-+ などを使用したりすることがあります。
編集1
テスト文字列を変更しました。以前は、CR LF を に置き換える次のコードがありました
。
$this->_data = str_replace(chr(10),"<BR>",$this->_data ,$count);//strip New line
$this->_data = str_replace(chr(13),'',$this->_data ,$count);//strip carriage return
申し訳ありませんが、これらのコード行を見落としていました。ページに「テスト」が多すぎます。現在表示されているテスト文字列は「生」のものです。次のようにすべてをファイルに保存します。
$fp = fopen('/var/www/lsm/application/logs/showinterfacesstatus.txt', 'w');
fwrite($fp, $this->_data);
fclose($fp);
ここで、$this->_data には生データが含まれます。私はこのファイルを開いてすべてをコピーしました...それから私のテスト文字列変数に貼り付けました。
そうは言っても、テキスト エディターでファイルを分析したところ、元の文字列と変更された文字列の唯一の違いは、すべての CRLF が削除されていることです。しかし、それが役立つ場合に備えて、このロジックを削除しました. また、テキスト エディター内の変更されていないデータのスクリーンショットも含めました。ありがとう。