在括号内拆分字符串

时间:2016-11-28 23:51:04

标签: php regex

我需要将一个字符串VN7-572G-75AJ(NX.G6GSA.001)拆分成一个数组,如下所示:

[0] => VN7-572G-75AJ
[1] => NX.G6GSA.001

..但是我无法正确匹配组:

$str = 'VN7-572G-75AJ(NX.G6GSA.001)';
preg_match('#\(/[^(]*/\) \((.*?)\)#', $str, $matches);
echo print_r($matches ,1); // outputs empty array

2 个答案:

答案 0 :(得分:2)

完全非正则表达式解决方案是可能的:

$str = 'VN7-572G-75AJ(NX.G6GSA.001)';
echo strstr($str, '(', true);       // Part 1
echo "\n";
echo trim(strstr($str, '('), '()'); // Part 2

请参阅PHP demo。使用strstr可以轻松获得第一个VN7-572G-75AJ部分( true 参数是$before_needle值,我们需要在char指示之前)和第二个{}获取第一个(到结尾的所有子字符串,然后trim帮助从初始和尾随位置删除()

如果你想修复你的正则表达式,这是一个解决方案:

$str = 'VN7-572G-75AJ(NX.G6GSA.001)';
preg_match('#^([^(]*)\(([^()]*)\)$#', $str, $matches);
echo $matches[1] . "\n" . $matches[2];

这是PHP demo

<强>详情:

  • ^ - 字符串开头
  • ([^(]*) - 第1组:除(
  • 以外的零个或多个符号
  • \( - 文字(
  • ([^()]*) - 第2组:除()以外的0 +字符
  • \) - 文字)符号
  • $ - 字符串结束。

另一种 - 更简单的正则表达方式 - 是匹配()以外的任何1个字符:

preg_match_all('#[^()]+#', $str, $matches);
echo $matches[0][0] . "\n" . $matches[0][1];

请参阅this PHP demo

答案 1 :(得分:2)

当然,如果您正在寻找正则表达式,这在这里运作良好

$str = 'VN7-572G-75AJ(NX.G6GSA.001)';
preg_match('/(.*?)\((.*?)\)/', $str, $matches);
echo print_r($matches ,1); // outputs empty array