Php preg_replace通过提取方括号之间的最后一个重合点来分割数据

Php preg_replace通过提取方括号之间的最后一个重合点来分割数据,php,regex,Php,Regex,我有一个字符串上提取国家的正则表达式 弦 BRY AIR PVT LTD [IN] BRY AIR [ASIA] PVT LTD [IN] 方括号之间的最新子字符串有时存在,有时不存在 如果在最后一个单词和这个子字符串之间存在空格,则该空格不是正常空格。是一个看不见的空间 有些地方在结尾处是一个不正确的传统空间 function extractNameAndCountry { $without = preg_replace('/[\W]*$/', '', preg_replace('

我有一个字符串上提取国家的正则表达式

BRY AIR PVT LTD [IN] 
BRY AIR [ASIA] PVT LTD [IN]
方括号之间的最新子字符串有时存在,有时不存在

如果在最后一个单词和这个子字符串之间存在空格,则该空格不是正常空格。是一个看不见的空间

有些地方在结尾处是一个不正确的传统空间

function extractNameAndCountry {
    $without = preg_replace('/[\W]*$/', '', preg_replace('/[\p{Z}\t]*(\[(.*?)\])?$/u', '', trim($string)));
    if (preg_match('/\[([^\)]*)\]/', $string, $matches)) {
        $country = $matches[1];
    }
}

extractNameAndCountry('BRY AIR PVT LTD [IN]');  
echo $without -> BRY AIR PVT LTD
echo $country -> IN

// Wrong result
extractNameAndCountry('BRY AIR [ASIA] PVT LTD [IN]');
echo $without -> BRY AIR
echo $country -> ASIA] PVT LTD [IN
我正在尝试或中的其他方法,但我不知道如何在结束时仅提取第一个并发

您可以使用

preg_match('~^(.*?)\s*\[([^][]*)]\s*$~u', $s, $match)
详细信息

  • ^
    -字符串的开头
  • (.*)
    -除换行符以外的任何0+字符,尽可能少
  • \s*
    -任何0+空格
  • \[
    -文字
    [
  • ([^][]*)
    -第1组:除
    [
    ]
    字符以外的任何0+字符
  • ]
    -文字
    ]
  • \s*
    -0+空格
  • $
    -字符串结束
见a:

$strs=[“BRY航空私人有限公司 [IN],“BRY AIR[亚洲]私人有限公司 [在]“];
foreach($s){
如果(预匹配('~^(.*)\s*\[([^][]*)]\s*$$u',$s,$match)){
回显$match[1]。“.$match[2]。\n”;
}
}
输出:

BRY AIR PVT LTD<=>IN
BRY AIR [ASIA] PVT LTD<=>IN
BRY AIR PVT LTDIN
布莱航空[亚洲]私人有限公司
请注意,您可能

BRY AIR PVT LTD<=>IN
BRY AIR [ASIA] PVT LTD<=>IN