我在字符串上提取国家/地区的正常表达
的字符串
BRY AIR PVT LTD [IN]
BRY AIR [ASIA] PVT LTD [IN]
方括号之间的最新子字符串有时存在,有时则不存在。
如果在最后一个单词之间存在espace,则此子字符串不是正常空格。是一个看不见的空间。
Sometines在最后作为一个不正确的附加空间
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
我在http://rubular.com/或https://regex101.com/尝试其他方式,但我不知道如何在结尾处仅提取第一个并发
答案 0 :(得分:1)
您可以使用
preg_match('~^(.*?)\s*\[([^][]*)]\s*$~u', $s, $match)
<强>详情
^
- 字符串开头(.*?)
- 除了换行符之外的任何0 +字符,尽可能少\s*
- 任何0+空格\[
- 文字[
([^][]*)
- 第1组:[
和]
字符以外的任何0 +字符]
- 文字]
\s*
- 0+ whitespaces $
- 字符串结束。查看PHP demo:
$strs = ["BRY AIR PVT LTD [IN] ", "BRY AIR [ASIA] PVT LTD [IN]"];
foreach ($strs as $s) {
if (preg_match('~^(.*?)\s*\[([^][]*)]\s*$~u', $s, $match)) {
echo $match[1] . "<=>" . $match[2] . "\n";
}
}
输出:
BRY AIR PVT LTD<=>IN
BRY AIR [ASIA] PVT LTD<=>IN
请注意,您可以