32、PHP 原生魅力 - 字符串 - 解析字符串

作者: 温新

图书: 【原生 PHP 魅力】

阅读: 207

时间: 2024-11-21 15:03:29

使用 sscanf() 函数,你可以解析一个遵循已知模式的字符串。

例如,考虑一下 ISBN 码。ISBN 码是书籍的代码标识符,它由 13 个字符组成,定义如下:

  • 前 3 位数字是 EAN 码;
  • 然后是一个分隔符-
  • 接下来 1 位数字表示组号;
  • 再然后是一个分隔符-
  • 接着 3 位数字表示出版社代码;
  • 再次是一个分隔符-
  • 随后的 5 位数字表示书名代码;
  • 最后一个分隔符-
  • 以及最后 1 位数字用于校验。

例如:“978-0-596-52068-7”

如果你想解析 ISBN 码并提取各部分,你可以使用 sscanf() 函数。sscanf() 函数至少有两个参数:

  • 第一个参数是要解析的字符串(例如,“978-0-596-52068-7”);
  • 第二个参数是一个模式,由一些占位符组成。例如,使用 %d 可以声明一个数字。对于 ISBN 而言,你可以指定模式为:"%'d-%d-%d-%d-%d'",这意味着:一个数字后面跟着破折号字符,再一个数字后面也跟着破折号,以此类推,总共五组这样的结构。

这样,模式解释为:一个数字,紧接破折号,接着是另一个数字和破折号,这样的序列重复五次。

<?php

$isbn = "978-0-596-52068-7";

[$ean, $group, $publisher, $title, $check_digit] = sscanf($isbn, "%d-%d-%d-%d-%d");

echo "EAN: " . $ean . PHP_EOL;
echo "Group: " . $group . PHP_EOL;
echo "Publisher: " . $publisher . PHP_EOL;
echo "Title: " . $title . PHP_EOL;
echo "Check digit: " . $check_digit . PHP_EOL;

输出如下:

$ php 32-sscanf.php
EAN: 978
Group: 0
Publisher: 596
Title: 52068
Check digit: 7
请登录后再评论