有没有办法解析这些字符串?

Joh*_*ohn 4 php

如果有,我当然不会看到它.我们正在对驾驶执照进行磁条读取.数据似乎不一致.驾驶执照应遵循的标准规定了任何一个领域可以拥有的长度限制.我无法解决的部分是如何解析这些数据.

例如,字段可以允许总共13个字符,但仅使用8个字符.在这种情况下,将始终有一个插入符号分隔符结束字符串的该部分.然而,这里是棘手的部分,如果一个字段恰好是13(13个允许的),则没有结束符号分隔符和没有正确的填充.所有数据都一起运行.

这是两个示例字符串.

%CAMISSION HILLSSMITH$JOHN$JIM$JR^1147 SOMESTREET^?
%CALOS ANGELES^DOE$JOHN$CARL^14324 MAIN ST APT 5^?
Run Code Online (Sandbox Code Playgroud)

使用PHP,我该怎么做?我真的很感激这一点.我真的很难过.

Joh*_*ica 5

好的,我们走了.我使用该x标志使正则表达式更具可读性并能够对其进行评论.

根据发布的@EboMike规范,每个字段都有一个最大长度,^如果它短于该长度则终止.该名称是一个复合字段,$用作姓氏,名字,中间名和后缀之间的分隔符.地址也是如此,$如果地址有多行,则使用该地址.

$licenses = array(
    '%CAMISSION HILLSSMITH$JOHN$JIM$JR^1147 SOMESTREET^?',
    '%CALOS ANGELES^DOE$JOHN$CARL^14324 MAIN ST APT 5^?'
);

foreach ($licenses as $license) {
    preg_match(
        '@
            ^%
            (.{2})          # State, 2 chars
            ([^^]{0,12}.)   # City, 13 chars, delimited by ^
            ([^^]{0,34}.)   # Name, 35 chars, delimited by ^
            ([^^]{0,28}.)   # Address, 29 chars, delimited by ^
            \?$
        @x',
        $license,
        $fields
    );

    $state   = $fields[1];
    $city    = rtrim($fields[2], '^');
    $name    = explode('$', rtrim($fields[3], '^'));
    $address = explode('$', rtrim($fields[4], '^'));

    echo "$license\n";
    echo "STATE:   "; print_r($state);   echo "\n";
    echo "CITY:    "; print_r($city);    echo "\n";
    echo "NAME:    "; print_r($name);
    echo "ADDRESS: "; print_r($address);
    echo "\n";
}
Run Code Online (Sandbox Code Playgroud)

输出:

CAMISSION HILLSSMITH$JOHN$JIM$JR^1147 SOMESTREET^
STATE:   CA
CITY:    MISSION HILLS
NAME:    Array
(
    [0] => SMITH
    [1] => JOHN
    [2] => JIM
    [3] => JR
)
ADDRESS: Array
(
    [0] => 1147 SOMESTREET
)

CALOS ANGELES^DOE$JOHN$CARL^14324 MAIN ST APT 5^
STATE:   CA
CITY:    LOS ANGELES
NAME:    Array
(
    [0] => DOE
    [1] => JOHN
    [2] => CARL
)
ADDRESS: Array
(
    [0] => 14324 MAIN ST APT 5
)
Run Code Online (Sandbox Code Playgroud)