2015-01-21 2 views
0

У меня есть строка:Split Строка с preg_match

$productList=" 
Saluran Dua(Bothway)-(TAN007); 
Speedy Password-(INET PASS); 
Memo-(T-Memo); 
7-pib r-10/10-(AM); 
FBI (R/N/M)-(Rr/R(A)); 
"; 

я хочу результат:

Array(
[0]=>TAN007 
[1]=>INET PASS 
[2]=>T-Memo 
[3]=>AM 
[4]=>Rr/R(A) 
); 

я использовал:

$separator = '/\-\(([A-z ]*)\)/'; 
preg_match_all($separator, $productList, $match); 
$value=$match[1]; 

, но результат:

Array(
[0]=>INET PASS 
[1]=>AM 
); 

там должен быть неправильный код, кто-нибудь может это помочь?

+1

Добавить числа '0-9' и тире' -' в ваше регулярное выражение –

ответ

0

для 1-й линии, вам нужно 0-9

для 3 линии вам нужно - в и

в последней строке вам нужно() попробовать это

#\-\(([a-zA-Z/0-9(\)\- ]*)\)# 
+1

'[Az]' включает в себя все символы между 'Ā' и' z'. Как вы можете видеть из таблицы [ASCII] (http://www.asciitable.com), она ** содержит ** 'A' to' Z', 'a'' 'и 6 других символов:' [ ',' \ ','] ','^',' _' и backquote [** '**]. – axiac

+0

@axiac okay я не знал, я удалил эту строку. – jmattheis

0

попробовать с этим REGEX

$separator = '#\-\(([A-Za-z0-9/\-\(\) ]*)\)#'; 
3

Вашего regex не включает в себя всю ч которые могут появиться в фрагменте текста, который вы хотите захватить.

Правильный regex является:

$match = array(); 
preg_match_all('/-\((.*)\);/', $productList, $match); 

Объяснение (изнутри наружу):

  • .* матчей ничего;
  • (.*) - это выражение выше, помещенное в скобки, чтобы зафиксировать совпадение в $match[1];
  • -\((.*)\); Вышеупомянутое в контексте: оно соответствует, если ему предшествует -(, а затем );; скобки скопированы, чтобы использовать их буквальные значения, а не их специальную интерпретацию regex;
  • нет необходимости скрывать - в регулярном выражении; он имеет специальную интерпретацию только тогда, когда он используется внутри диапазонов символов ([A-Z], f.e.), но даже там, если символ штриха (-) находится сразу после [ или непосредственно перед ], тогда он не имеет особого значения; например [-A-Z] означает: тире (-) или любую прописную букву (A - Z).

Теперь print_r($match[1]); выглядит следующим образом:

Array 
(
    [0] => TAN007 
    [1] => INET PASS 
    [2] => T-Memo 
    [3] => AM 
    [4] => Rr/R(A) 
)