sscanf()

1. 定义

该函数根据指定格式解析字符串。

2. 语法

sscanf ( string $str , string $format [, mixed &$... ] ) : mixed

3. 参数说明

参数 可选性 数据类型 描述
$str 必需 字符串 要被解析的字符串
$format 必需 数组 解析格式,例如%s\t%d
... 可选 mixed 被设置为解析匹配的值

其中$format的格式为%[flags][width][.precision]specifier

flags的值有五种:

  • -:表示输出时为左对齐,默认为右对齐
  • +:用加号+前缀正数;默认仅为负数,前缀为负号
  • 空格:默认用空格填充结果(位数)
  • 0:左边的数字使用0填充,如果是字符串也可以用0填充右边的内容
  • ':使用单引号包裹的字符,可以被用来填充结果

width表示允许最长输出的位数。

precision根据标识符的不同含义也不同:

  • 对于eE标识符来说,该值表示小数点后保留的位数
  • 对于s标识符来说,该值表示允许被输出的最大字符数
specifier标识符 说明
% 字面量百分号
c ASCII码字符
d 带符号(正负号)的十进制整数
D 十进制整数
e 科学计数法数
E 使用大写字母E表示的科学计数法
o 十进制整数
s 遇到任意空格字符时停止读取
u 无符号十进制整数
x 小写形式的十六进制整数
X 大写形式的十六进制整数
n 目前已处理的字符数

另外,如果只传入了前两个参数,该函数将返回一个数组;如果传入可选参数,将返回被设置了值的个数。

如果$format中要求的子字符串多于$str可用的,将返回-1

4. 示例

<?php

// sscanf()
// 根据指定格式解析字符串

$str = "网站名称:极速教程\t网站地址:https://www.jisuapi.com/\t联系方式:18888888888";
$format = '%s';// 解析到 空格符(包括换行符和Tab空格)便停止
$res = sscanf($str, $format);
var_dump($res);
/* 输出:
array(1) {
  [0]=>
  string(27) "网站名称:极速教程"
}
*/

$format = '%s%n';// 解析到 空格符(包括换行符和Tab空格)便停止,并返回已解析的字符串长度
$res = sscanf($str, $format);
var_dump($res);
/* 输出:
array(2) {
  [0]=>
  string(27) "网站名称:极速教程"
  [1]=>
  int(27)
}
*/

$format = "%s\t%s\t%s";
$res = sscanf($str, $format, $name, $host, $phone);// 从第三个参数起,依次对应$format中的子字符串结果
var_dump($res);// 输出:int(3)

echo $name, "\t", $host, "\t", $phone;// 输出:网站名称:极速教程      网站地址:https://www.jisuapi.com/      联系方式:18888888888

5. 延展阅读

  • fscanf():对指定文件句柄的一行进行格式化解析
  • printf():将字符串按某种特定格式输出。返回被格式化后的字符串长度
  • sprintf():返回被格式化后的字符串