如何在字符串很复杂的情况下解析php中的字符串模式

时间:2013-09-23 06:43:19

标签: php string parsing delimiter

我需要你的帮助来解决如何解析字符串。我有一个结构如下的字符串:

MALANG | TVhHMTAwMDBK MALANGBONG,GARUT | QkRPMjA3MTlK MALANGKE BARAT,MASAMBA | VVBHMjMzMDVK MALANGKE,MASAMBA | VVBHMjMzMDRK

我现在混淆了如何解析这个字符串,以便我可以得到这样的模式:

MALANG|TVhHMTAwMDBK
MALANGBONG,GARUT|QkRPMjA3MTlK
MALANGKE BARAT,MASAMBA|VVBHMjMzMDVK
MALANGKE BARAT,MASAMBA|VVBHMjMzMDVK

模式输出为City_Name | RandomCode

我尝试使用空间爆炸,但城市名称有时也包含空格。我可以使用什么功能来解决这个问题?

1 个答案:

答案 0 :(得分:1)

试一试。它适合你的例子确定

$str = 'MALANG|TVhHMTAwMDBK MALANGBONG,GARUT|QkRPMjA3MTlK MALANGKE BARAT,MASAMBA|VVBHMjMzMDVK MALANGKE,MASAMBA|VVBHMjMzMDRK';
$pattern = '/(?<=^| )[A-Z, ]+?\|[A-Za-z0-9]+(?= |$)/';

if (preg_match_all($pattern, $str, $matches)) {
    $parts = $matches[0];
}

如果您的城市名称中包含大写字母,空格和逗号以外的任何内容,则可能需要调整一些字符类。

此处示例 - http://codepad.viper-7.com/6ujl3p

或者,如果 RandomCode 部分保证全部长度为12个字符,preg_split可能更合适,例如

$pattern = '/(?<=\|[A-Za-z0-9]{12}) /';
$parts = preg_split($pattern, $str);

在这里演示 - http://codepad.viper-7.com/Wd4Wmc