2016-06-03 3 views
1

Как получить все совпадения в строке? Например, строкаСовпадение нескольких строк в строке

hhh (12) 5cb (jkl) jj 

или

brt (11) { 

Я хочу, чтобы получить и JKL в первой строке и в второй.

Я попытался

preg_match("/.*\((.*)\).*/", $input_line, $output_array); 

но получить только последний матч в строке.

ответ

2

регулярное выражение вы ищете должно быть что-то вроде этого:

preg_match_all("/\((.*?)\)/", $input_line, $output_array); 

Live example.

Объяснение:

(.*)  #grab all characters 
    (.*?) #as little as possible 
\((.*?)\) #that are within brackets 

Вы также должны использовать preg_match_all вместо preg_match так, что вы получите все строки, соответствующие шаблону.

+0

Спасибо за ответ, но PHP пишет "Неизвестный модификатор 'г'" – user3225777

+0

@ user3225777 ПОВ, мой плохой. См. Правки. – lolbas

0

Использовать preg_match_all вместо preg_match. Он возвращает 2-мерный массив с информацией из каждого совпадения.

Вам также необходимо исправить регулярное выражение. Выньте .* вокруг круглых скобок, потому что это заставляет его сопоставлять все остальное в строке, поэтому есть только одно совпадение. И внутри круглых скобок вам нужно использовать нежирный квантификатор, поэтому он не будет соответствовать закрывающей скобке.

$input_line = 'hhh (12) 5cb (jkl) jj'; 
preg_match_all("/.*\((.*?)\).*/", $input_line, $output_array); 
print_r($output_array[1]); // array of all the capture group 1 

DEMO

Смежные вопросы