Maison  >  Article  >  développement back-end  >  PHP analyse les chaînes en variables basées sur la fonction de format de chaîne sscanf()

PHP analyse les chaînes en variables basées sur la fonction de format de chaîne sscanf()

黄舟
黄舟original
2017-11-03 09:54:241953parcourir

Exemple

Analyser une chaîne :

<?php
$str = "age:30 weight:60kg";
sscanf($str,"age:%d weight:%dkg",$age,$weight);
// show types and values
var_dump($age,$weight);
?>

La fonction sscanf() analyse l'entrée d'une chaîne selon le format spécifié. La fonction sscanf() analyse une chaîne en une variable basée sur une chaîne de format.

Si seulement deux paramètres sont passés à cette fonction, les données seront renvoyées sous forme de tableau. Sinon, si des paramètres supplémentaires sont transmis, les données analysées seront stockées dans ces paramètres. Si le nombre de séparateurs est supérieur au nombre de variables les contenant, une erreur se produit. Cependant, si le nombre de séparateurs est inférieur au nombre de variables les contenant, les variables supplémentaires contiennent NULL.

Fonctions associées :

  • printf() - Produit une chaîne formatée

  • sprintf() - Écrit une chaîne formatée dans une variable

Syntaxe

sscanf(string,format,arg1,arg2,arg++)
Paramètres Description
chaîne Obligatoire. Spécifie la chaîne à lire.
format Obligatoire. Spécifie le format à utiliser.
参数 描述
string 必需。规定要读取的字符串。
format 必需。规定要使用的格式。

可能的格式值:

  • %% - 返回一个百分号 %

  • %c - ASCII 值对应的字符

  • %d - 包含正负号的十进制数(负数、0、正数)

  • %e - 使用小写的科学计数法(例如 1.2e+2)

  • %u - 不包含正负号的十进制数(大于等于 0)

  • %f - 浮点数

  • %o - 八进制数

  • %s - 字符串

  • %x - 十六进制数(小写字母)

  • %X - 十六进制数(大写字母)

附加的格式值。必需放置在 % 和字母之间(例如 %.2f):

  • + (在数字前面加上 + 或 - 来定义数字的正负性。默认情况下,只有负数才做标记,正数不做标记)

  • ' (规定使用什么作为填充,默认是空格。它必须与宽度指定器一起使用。例如:%'x20s(使用 "x" 作为填充))

  • - (左调整变量值)

  • [0-9] (规定变量值的最小宽度)

  • .[0-9] (规定小数位数或最大字符串长度)

注释:如果使用多个上述的格式值,它们必须按照上面的顺序进行使用,不能打乱。

arg1 可选。存储数据的第一个变量。
arg2 可选。存储数据的第二个变量。
arg++ 可选。存储数据的第三、四个变量。依此类推。
Valeurs de format possibles : %% - renvoie un signe de pourcentage %%c - le caractère correspondant à la valeur ASCII%d - Nombre décimal avec signe (négatif, 0, positif) %e - Utiliser la notation scientifique minuscule (Par exemple, 1.2e +2) %u - Nombre décimal sans signe (supérieur ou égal à 0) %f - Nombre à virgule flottante%o - Nombre octal%s - Chaîne%x - Nombre hexadécimal (inférieur lettres majuscules) %X - Nombre hexadécimal (lettres majuscules) Valeur de format supplémentaire . Doit être placé entre % et une lettre (ex. : %.2f) : + (Ajoutez + ou - devant un chiffre pour définir le signe du chiffre. Par défaut, seul Seuls les nombres négatifs sont marqués, les nombres positifs ne sont pas marqués) ' (spécifie ce qu'il faut utiliser comme remplissage, la valeur par défaut est des espaces. Il doit être utilisé avec le spécificateur de largeur. Par exemple : %'x20s (Utilisez "x" comme remplissage)) - (Ajustez la valeur de la variable à gauche) [0-9] ( Spécifiez la valeur minimale de la variable Largeur) .[0-9] (Spécifie le nombre de décimales ou la longueur maximale de la chaîne) Remarque : Si plusieurs valeurs de format ci-dessus sont utilisées, elles doivent être utilisées dans l'ordre ci-dessus et ne peut pas être perturbé.
arg1 Facultatif. La première variable pour stocker des données.
arg2 Facultatif. Une deuxième variable pour stocker les données.
arg++ Facultatif. Les troisième et quatrième variables qui stockent les données. Et ainsi de suite.

技术细节

返回值: 如果只向该函数传递两个参数,数据将以数组的形式返回。否则,如果传递了额外的参数,那么被解析的数据会存储在这些参数中。如果区分符的数目大于包含它们的变量的数目,则会发生错误。不过,如果区分符的数目小于包含它们的变量的数目,则额外的变量包含 NULL。
PHP 版本: 4.0.1+

更多实例

实例 1

使用格式值 %s、%d 和 %c:

<?php
$str = "If you divide 4 by 2 you&#39;ll get 2";
$format = sscanf($str,"%s %s %s %d %s %d %s %s %c");
print_r($format);
?>

 sscanf() 的作用:从一个字符串中读进与指定格式相符的数据.

原型: int sscanf (const char *str,const char * format,........);

说明: sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。转换后的结果存于对应的参数内。

         成功则返回参数数目,失败则返回0。

注意:sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。

大家都知道sscanf是一个很好用的函数,利用它可以从字符串中取出整数、浮点数和字符串等等。它的使用方法简单,特别对于整数和浮点数来说。

这里就举几个经常用到的例子来说明他的用法,便于大家深刻理解他的用法.

例子:

#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  
  
int main(){  
    char str[100];  
    //用法一:取指定长度的字符串  
    sscanf("12345","%4s",str);  
    printf("用法一\nstr = %s\n",str);  
  
    //用法二:格式化时间  
    int year,month,day,hour,minute,second;  
    sscanf("2013/02/13 14:55:34","%d/%d/%d %d:%d:%d",&year,&month,&day,&hour,&minute,&second);  
    printf("用法二\ntime = %d-%d-%d %d:%d:%d\n",year,month,day,hour,minute,second);  
  
    //用法三:读入字符串  
    sscanf("12345","%s",str);  
    printf("用法三\nstr = %s\n",str);  
  
    //用法四:%*d 和 %*s 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)  
    sscanf("12345acc","%*d%s",str);  
    printf("用法四\nstr = %s\n",str);  
  
    //用法五:取到指定字符为止的字符串。如在下例中,取遇到&#39;+&#39;为止字符串。  
    sscanf("12345+acc","%[^+]",str);  
    printf("用法五\nstr = %s\n",str);  
  
    //用法六:取到指定字符集为止的字符串。如在下例中,取遇到小写字母为止的字符串。  
    sscanf("12345+acc121","%[^a-z]",str);  
    printf("用法六\nstr = %s\n",str);  
    return 0;  
}

PHP analyse les chaînes en variables basées sur la fonction de format de chaîne sscanf()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn