我想从PHP中的字符串中获取2个字母的国家/地区代码。
例如:
Lazada-SG-IOS-Non Incent_IMRO33811 - SG
Cobo Launcher Android BR,IN,ID,IQ,US Incent(上限) - BR,IN,ID,IQ,US
Beintoo-Jumia-Andoid-NG-Blended Incent_IMRO27929 - NG
Brave Frontier - Android AU / CA / US / UK Incent CPE - AU,CA,US,UK
MU Origin Android KR非上升 - KR,MU
GS Shop Android | IMRO37088 | KR - 非上市 - KR
Zalando_DK_android_nonincent_IMRO35303 - DK
答案 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]));
}
您会收到一系列可能的国家/地区代码。然后可以根据有效国家/地区代码列表检查此数组。