如何从php

时间:2015-08-18 11:35:04

标签: php

我想从PHP中的字符串中获取2个字母的国家/地区代码。

例如:

  1. Lazada-SG-IOS-Non Incent_IMRO33811 - SG

  2. Cobo Launcher Android BR,IN,ID,IQ,US Incent(上限) - BR,IN,ID,IQ,US

  3. Beintoo-Jumia-Andoid-NG-Blended Incent_IMRO27929 - NG

  4. Brave Frontier - Android AU / CA / US / UK Incent CPE - AU,CA,US,UK

  5. MU Origin Android KR非上升 - KR,MU

  6. GS Shop Android | IMRO37088 | KR - 非上市 - KR

  7. Zalando_DK_android_nonincent_IMRO35303 - DK

2 个答案:

答案 0 :(得分:1)

此函数将返回一个包含任何国家/地区代码的数组,在大写的情况下每边都有一个非字母数字字符:

function getCountryCodes($input) {

    //An array with all the country codes.
    //You will have to add more yourself.
    static $country_codes = array('BR','IN','ID','IQ','US','MU','KR');

    //Creates a regex pattern like ""/(?<=[^a-zA-Z0-9])(?:BR|IN|ID|IQ|US|MU|KR)(?=[^a-zA-Z0-9])/".
    static $pattern = '/(?<=[^a-zA-Z0-9])(?:' . implode('|', $country_codes) . ')(?=[^a-zA-Z0-9])/';

    //Find any matches for the pattern.
    preg_match_all($pattern, $input, $matches);

    //Return the result.
    return $matches[0];

}

让我们打破正则表达式:

  • (?<=[^a-zA-Z0-9]):看不出任何字母数字的内容。
  • (?:BR|IN|ID|IQ|US|MU|KR):匹配任何|分隔符替代,但不捕获到子组(由于?:)。
  • (?=[^a-zA-Z0-9]):预测任何不是字母数字的内容。

有关国家/地区代码的完整列表,请参阅Wikipedia

答案 1 :(得分:0)

对于每一行,请执行

preg_match_all('/\b([A_Z]{2}([^A_Za-z]([A_Z]{2})))*\b/', $string, $sets, PREG_SET_ORDER);
$array = array();
foreach ($sets as $matches) {
    $array = array_merge($array, preg_split('/[^A-Z]/', $matches[1]));
}

您会收到一系列可能的国家/地区代码。然后可以根据有效国家/地区代码列表检查此数组。