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+字符,尽可能少(.*)
-任何0+空格\s*
-文字\[
[
-第1组:除([^][]*)
和[
字符以外的任何0+字符]
-文字]
]
-0+空格\s*
-字符串结束$
$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