2016-11-28 2 views
2

мне нужна строка 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

абсолютно не регулярное выражение решение возможно:

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

См . Первый VN7-572G-75AJ часть может быть легко получена с strstr (истинного аргумента значения $before_needle, нам нужно все до того, как символ указано), а второй один получает все подстроки из первого ( до конца, а затем trim помогает удалить ( и ) от начального и конечного положений.

Если вы хотите, чтобы ваше регулярное выражение фиксированы, вот решение:

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

Вот PHP demo

Детали:

  • ^ - начало строки
  • ([^(]*) - Группа 1: ноль или более сим кроме (
  • \( Bols - буквальный (
  • ([^()]*) - Группа 2: 0+ кроме ( и )
  • \) символы - это литеральные ) символа
  • $ - конец строки.

Другой - проще регулярное выражение способ - это найдено 1+ других символов, чем ( и ):

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

См this PHP demo

+2

Или: https://eval.in/687290 :) Еще проще. – sinisake

+0

Да, может быть больше подходов. –

2

Это хорошо работало здесь, конечно, если вы ищет регулярное выражение

$str = 'VN7-572G-75AJ(NX.G6GSA.001)'; 
preg_match('/(.*?)\((.*?)\)/', $str, $matches); 
echo print_r($matches ,1); // outputs empty array 
Смежные вопросы