我需要将一个字符串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
答案 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];
答案 1 :(得分:2)
当然,如果您正在寻找正则表达式,这在这里运作良好
$str = 'VN7-572G-75AJ(NX.G6GSA.001)';
preg_match('/(.*?)\((.*?)\)/', $str, $matches);
echo print_r($matches ,1); // outputs empty array