• ベストアンサー

ちょっと複雑なPHPでテキストファイルの読み込み

PHPで、テキストファイルを読み込むのですが、その際に 自分で作った記号 例えば… ★★★★★★★★★★★★★★★★ ================ △△△△△△△△△△△△△△△△ などが含まれていた場合、 ★と★、=と=、△と△で挟まれているテキストだけを 表示させたいのですが、どうすれば出来ますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mzon
  • ベストアンサー率48% (26/54)
回答No.1

下記を参考にしてください。 strposで文字を探して、substrで取得するになります。 また、取得対象文字の移動も忘れずに。 下記は指定文字内の文字を取得する関数です。 取得後の位置を「pEndPos 」に返すので、呼び出し元で 「$pSource = substr( $pSource, $pEndPos );」とすれば次の位置になります。 //指定文字情報 //引 数:$pElement - 取得開始キー // $pStopElement - 取得終了キー // $pSource - 対象文字 //戻り値:$_data - 変換後の文字列 // $pEndPos - 検索終了位置(見つからない場合はfalseとなる) function getLineData($pElement, $pStopElement, $pSource, $pEndPos ) { $_data = null; $pEndPos = false; $pElement = strtolower( $pElement ); $_start = strpos( strtolower( $pSource ), $pElement, 0 ); $_stop = strpos( strtolower( $pSource ), "</" . $pStopElement . chr(62), $_start ); if( $_start > strlen( $pElement ) && $_stop > $_start ) { $_data = trim( substr( $pSource, $_start, $_stop - $_start ) ); $pEndPos = $_stop + strlen($pStopElement); } return( $_data ); }

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

$text=file_get_contents($filename); if(preg_match("/★(.+?)★/s", $text, $mch)) echo $mch[0]; if(preg_match("/=(.+?)=/s", $text, $mch)) echo $mch[0]; if(preg_match("/△(.+?)△/s", $text, $mch)) echo $mch[0]; 未検証です。 .ini形式を模した独自フォーマットなら、 1行ずつ読み込んでキーワードと値に分割する処理が必要だと思いますが。

すると、全ての回答が全文表示されます。

関連するQ&A