sscanf( string $str, string $format[, mixed &$... ] )
は、フォーマット「$format」に基づき、文字列「$str」をパース(構文解析)し、値を抽出する組み込み関数。
定義
多様な型 sscanf( 文字列型 $str, 文字列型 $format[, 多様な型 &$...] );
パラメータ
- 文字列型 $str
パース(構文解析)したい文字列。
- 文字列型 $format
フォーマット。
- 多様な型 $…
オプション。
変数を指定すると、フォーマットに基づくパース(構文解析)で抽出した値を、変数に代入できる。
変数は、カンマ
,
で区切り、複数指定できる。
フォーマット
フォーマットに関する詳しい解説は、printf()のページのフォーマットの項目にて。
構文
フォーマットに基づき、文字列をパースし、配列に格納
配列 = sscanf( 文字列, フォーマット );
「フォーマット」に基づき、「文字列」をパース(構文解析)し、値を抽出した値を、配列に格納し返す。
フォーマットに基づき、文字列をパースし、変数に代入
sscanf( 文字列, フォーマット, 変数1, 変数2, 変数3 );
「フォーマット」に基づき、「文字列」をパース(構文解析)し、値を抽出した値を、「変数1~3」に代入。
戻り値
「多様な型 &$…」のパラメータを指定しない場合、フォーマットに基づくパース(構文解析)で抽出した値を、配列に格納し返す。
「多様な型 &$…」のパラメータに変数を指定した場合、フォーマットに基づくパース(構文解析)で抽出した値を、変数に代入できる。
パース(構文解析)に失敗すると、「-1」を返す。
サンプル
日付(YYYY年MM月DD日)をパース
<?php
$varDate = "2012年7月3日";
$format = '%d年%d月%d日';
list( $varYear, $varMonth, $varDay ) = sscanf( $varDate, $format );
echo "年: $varYear<br />";
echo "月: $varMonth<br />";
echo "日: $varDay<br />";
?>
$varDate = "2012年7月3日";
$format = '%d年%d月%d日';
list( $varYear, $varMonth, $varDay ) = sscanf( $varDate, $format );
echo "年: $varYear<br />";
echo "月: $varMonth<br />";
echo "日: $varDay<br />";
?>
↓↓↓出力結果↓↓↓
年: 2012
月: 7
日: 3
月: 7
日: 3
日付(YYYY年MM月DD日)をパースし、変数に代入
<?php
$varDate = "2012年7月3日";
$format = '%d年%d月%d日';
sscanf( $varDate, $format, $varYear, $varMonth, $varDay );
echo "年: $varYear<br />";
echo "月: $varMonth<br />";
echo "日: $varDay<br />";
?>
$varDate = "2012年7月3日";
$format = '%d年%d月%d日';
sscanf( $varDate, $format, $varYear, $varMonth, $varDay );
echo "年: $varYear<br />";
echo "月: $varMonth<br />";
echo "日: $varDay<br />";
?>
↓↓↓出力結果↓↓↓
年: 2012
月: 7
日: 3
月: 7
日: 3
日付(YYYYMMDD)をパース
<?php
$varDate = "20120703";
$format = '%4d%2d%2d';
list( $varYear, $varMonth, $varDay ) = sscanf( $varDate, $format );
echo "年: $varYear<br />";
echo "月: $varMonth<br />";
echo "日: $varDay<br />";
?>
$varDate = "20120703";
$format = '%4d%2d%2d';
list( $varYear, $varMonth, $varDay ) = sscanf( $varDate, $format );
echo "年: $varYear<br />";
echo "月: $varMonth<br />";
echo "日: $varDay<br />";
?>
↓↓↓出力結果↓↓↓
年: 2012
月: 7
日: 3
月: 7
日: 3
日付(MM-DD-YYYY)をパース
<?php
$varDate = "07-03-2012";
$format = '%2$d-%3$d-%1$d';
list( $varYear, $varMonth, $varDay ) = sscanf( $varDate, $format );
echo "年: $varYear<br />";
echo "月: $varMonth<br />";
echo "日: $varDay<br />";
?>
$varDate = "07-03-2012";
$format = '%2$d-%3$d-%1$d';
list( $varYear, $varMonth, $varDay ) = sscanf( $varDate, $format );
echo "年: $varYear<br />";
echo "月: $varMonth<br />";
echo "日: $varDay<br />";
?>
↓↓↓出力結果↓↓↓
年: 2012
月: 7
日: 3
月: 7
日: 3
空白区切りの文字列をパース
<?php
$varData = "東京 2012 07 03";
$format = '%s %s %s %s';
sscanf( $varData, $format, $varPlace, $varYear, $varMonth, $varDay );
echo "場所: $varPlace<br />";
echo "年: $varYear<br />";
echo "月: $varMonth<br />";
echo "日: $varDay<br />";
?>
$varData = "東京 2012 07 03";
$format = '%s %s %s %s';
sscanf( $varData, $format, $varPlace, $varYear, $varMonth, $varDay );
echo "場所: $varPlace<br />";
echo "年: $varYear<br />";
echo "月: $varMonth<br />";
echo "日: $varDay<br />";
?>
↓↓↓出力結果↓↓↓
場所: 東京
年: 2012
月: 07
日: 03
年: 2012
月: 07
日: 03