【发布时间】:2023-03-20 18:48:01
【问题描述】:
我有一个文件,其中包含固定位置的数据(无分隔符)。
例如:
$string = '0412345678Mr foo 25.2';
与
code = '04' (integer with 2 characters)
ref = '12345678' (string with 8 characters)
name = 'Mr foo ' (string with 8 characters)
price = ' 25.2' (double with 6 characters)
我能做到:
$code = (int) substr($string, 0, 2);
$ref = substr($string, 2, 8);
$name = substr($string, 10, 8);
$price = (double) substr($string, 18, 6);
一切正常。
我想知道是否有其他人可以这样做。
我试试:
list($code, $ref, $name, $price) = sscanf($string, "%2d%8s%8s%6s");
但这不起作用。
如果我用另一个字符(如 _)替换空格,这是可行的,但我不想更改数据。
另一个想法?正则表达式?
【问题讨论】:
-
规则 10: 如果它没有坏,不要修理它!
-
您可以通过使用您提到的正则表达式来做到这一点。
([0-9]{2})([0-9]{8})([a-zA-Z ]{8})([0-9. ]{6})regex101.com/r/2bS8af/1 -
@kaldoran:我尝试过,但我不知道如何将结果放入变量中
标签: php regex optimization