関数・クラス解説
strcspn
version:PHP 4, PHP 5, PHP 7 (公式)指定した文字が最初に現れる位置を調べる
フォーマット
int : strcspn ( string $subject , string $mask [, int $start [, int $length ]] )
パラメータ
string $subject (必須)
検索対象の文字列
string $mask (必須)
検索する文字。文字列で複数指定可能
int $start
subject の中で調べ始める位置を指定できる。一番最初の文字を0 として数えるため、例えば1 を指定した場合は「2文字目から」と指定していることとなる。負の値を指定した場合、後ろ方向から数えてstart 番目の文字から調べ始めます。
int $length
subject の中での調べる文字の長さを指定。この値を指定すると subject の開始位置から、ここで指定した文字ぶんだけ検索します。負の値を指定した場合は、「subject の末尾から数えて length 文字目」という指定がなされますが、検索方向自体は変わらずsubject の開始位置から検索開始します。
返値 int
subject の中で、mask で指定した文字列中の文字が、最初に現れる文字位置を返します。
注意: start を指定した場合は、その位置から長さを数え始めます。 subject の先頭から数えるわけではありません。
解説
この関数では指定した文字が最初に現れる位置を数値で返却します。通常はsubject の全体を調べますが、start と length を指定時は調べる開始位置や調べる長さを指定することができます。
これらのパラメータを指定した場合は、strcspn(substr($subject, $start, $length), $mask) を指定したのと同様の作動を行います。詳しくはsubstrを参照してください。またこの関数とは逆に、指定した文字以外の文字が最初に現れる位置を調べるにはstrspnを利用することができます。
同様の動きをする関数で、指定した文字列が最初に現れる位置を調べるものにstrposがあります。また関連する関数で、指定した文字が最後に現れる位置を調べるstrrposも存在します。
注意: この関数はバイナリデータに対応しています。
記述サンプル
//PHP 7.4.6で実行
//調べたい文字列を指定
$str = "abcdefghijklmn";
//g が含まれているかを指定して実行
$result = strcspn($str, 'g');
//結果表示
echo $result;
6
/* ----------------------------- */
//調べたい文字列を指定
$str = "abcdefghijklmn";
//eiz の3つの文字列を指定していづれかが含まれているかをチェック
$result = strcspn($str, 'eiz');
//結果表示
echo $result;
4
/* ----------------------------- */
//調べたい文字列を指定
$str = "abcdefghijklmn";
//ヒットしない場合
$result = strcspn($str, 'z');
//結果 最後の文字位置 +1 が返る
echo $result;
14
/* ----------------------------- */
//調べたい文字列を指定
$str = "abcdefg_abcdefg";
//開始位置を指定
$result = strcspn($str, 'a', 5);
//結果表示 開始位置(fの位置)から数えた位置が返る
echo $result;
3
/* ----------------------------- */
//調べたい文字列を指定
$str = "abcdefg_abcdefg";
//開始位置をマイナスで指定
$result = strcspn($str, 'a', -8);
//結果 開始位置(_アンダーバー)から数えた位置が返る
echo $result;
1
/* ----------------------------- */
//調べたい文字列を指定
$str = "abcdefg_abcdefg";
//開始位置と長さを指定
$result = strcspn($str, 'f', 7, 3);
//結果 この場合はヒットしないため、指定した検索終了位置が返る
echo $result;
3
/* ----------------------------- */
//調べたい文字列を指定
$str = "abcdefg_abcdefg";
//開始位置を指定し長さはマイナスを指定
$result = strcspn($str, 'a', 7, -3);
//結果 アンダーバーの次のa がヒットするが、開始位置の指定があるため1が返る
echo $result;
1
/* ----------------------------- */
//マルチバイト文字列を指定
$str = "あいうえおかきくけこさしすせそ";
//実行
$result = strcspn($str, 'え');
//結果 正しく作動しない
echo $result;
echo '<br>';
0
参考リンク
・strspn 指定したマスク内に含まれる文字からなる文字列の最初のセグメントの長さを探すタグ
検索 位置 String 文字列
公式リファレンス
書式
strcspn ( string $subject , string $mask [, int $start [, int $length ]] ) : int
説明
subject において mask の文字がどれも含まれていない最初のセグメントの長さを返します。
start と length を省略した場合は、subject の全体を調べます。 これらのパラメータを指定した場合は、 strcspn(substr($subject, $start, $length), $mask) のようにするのと同じ動きになります (詳細は substr を参照ください)。
パラメータ
- subject
- 調べたい文字列。
- mask
- 許可しない文字をすべて含む文字列。
- start
- subject の中で調べ始める位置。 start に非負の値を指定した場合は、 strcspn() は、 subject の start 番目の文字から調べ始めます。 たとえば 'abcdef' という文字列があったとすると、 0 番目の文字が 'a' で 2 番目の文字は 'c' のようになります。 start に負の値を指定した場合は、 strcspn() は、 subject の後ろから start 番目の文字から調べ始めます。
- length
- subject の中での調べるセグメントの長さ。 length に非負の値を指定した場合は、 subject の開始位置から length 文字ぶんだけ調べます。 length に負の値を指定した場合は、 subject の開始位置から調べ始めて、 subject の末尾から length 文字目のところまで調べます。
返値
subject の中で、 mask の文字をまったく含まない 最初のセグメントの長さを返します。
注意: start を指定した場合は、その位置から長さを数え始めます。 subject の先頭から数えるわけではありません。
注意
注意: この関数はバイナリデータに対応しています。
サンプル
例1 strcspn() の例
$a = strcspn('abcd', 'apple');
$b = strcspn('abcd', 'banana');
$c = strcspn('hello', 'l');
$d = strcspn('hello', 'world');
$e = strcspn('abcdhelloabcd', 'abcd', -9);
$f = strcspn('abcdhelloabcd', 'abcd', -9, -5);
var_dump($a);
var_dump($b);
var_dump($c);
var_dump($d);
var_dump($e);
var_dump($f);
上の例の出力は以下となります。
int(0)
int(0)
int(2)
int(2)
int(5)
int(4)
参考
ワード検索
※入力キーワードが、関数名・説明文・タグに含まれるものを検索関数名アルファベット別
最終更新一覧
●stristr
大文字小文字を区別せず文字列を検索し、ヒット箇所以降(あるいは以前)の文字列を返却
●stripslashes
バックスラッシュでエスケープされた文字列から、バックスラッシュを取り除く
●stripos
大文字小文字を区別せずに文字列が最初に現れる位置を取得する
●stripcslashes
addcslashes() でクォートされた文字列をアンクォートする
●strip_tags
文字列から HTML と PHP のタグを除去して返却
●strcspn
指定した文字が最初に現れる位置を調べる
●strcoll
ロケールに基づいて2つの文字列を比較し同じか(あるいは大小)を判定する
●strcmp
2つの文字列を比較し同じか(あるいは大小)を判定する
●strchr
strstr() のエイリアス
●strcasecmp
2つの文字列を比較(大文字小文字を区別せず同じとみなす)
カテゴリー一覧
PHP の振る舞いの変更
音声フォーマットの操作
認証サービス
コマンドライン関連
圧縮およびアーカイブ
暗号
データベース関連
日付および時刻関連
ファイルシステム
自然言語および文字エンコーディング
画像処理および作成
メール関連
数学
テキスト以外の MIME 型
プロセス制御
その他の基本モジュール
その他のサービス
検索エンジン用の拡張モジュール
サーバー固有のモジュール
セッション関連
テキスト処理
変数・データ型関連
ウェブサービス
Windows 用のモジュール
XML 操作
GUI用の拡張モジュール