【问题标题】:How to parse string pattern in php while the string is complex字符串复杂时如何在php中解析字符串模式
【发布时间】:2013-09-23 06:43:18
【问题描述】:

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

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

我尝试使用按空格分解,但城市名称有时也包含空格。我可以使用 php 中的什么函数来解决这个问题?

【问题讨论】:

  • 都是MALAN开头的吗……还是有其他可能?
  • 由于它没有结构(随机位是赠品),请让数据提供者为您提供更多详细信息
  • 嗨 Kuzgun, MALAN 这个词将被替换为一些变量。如替换为 SUR : SURABAYA|axasdasWsdzx SURABAYA, BARAT DAYA|tverWasfxGMH 等。或者可以替换为与我国城市名称相似的其他单词,例如 JAKA : JAKARTA|nmTRGBSjgWVB JAKARTA BARAT,TANGERANG|kmliHYDgDjgg
  • 随机码部分都是12个字符吗?

标签: php string parsing delimiter


【解决方案1】:

试试这个。它适合你的例子 ok

$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

【讨论】:

猜你喜欢
  • 2016-06-20
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多