2015-11-19 7 views
2

Я хочу захватить текст в квадратных скобках и запятых в строке ниже.php regex квадратные скобки и запятые

$_['text_1']  = 'text_2 %d to %d of %d (%d text)'; 

У меня есть регулярное выражение для квадратных скобок

preg_match_all("/\[[^\]]*\]/",$string,$matches); //all strings with brackets 

, но нужно два регулярных выражения для

  1. текст_1
  2. текст_2% d-% d из% D (% d текст)
+0

ваш пример имеет круглую скобку вместо квадратных скобок, которая может объяснить, почему она не работает по назначению. – Calimero

+1

Где запятые? – Mariano

+0

Почему бы просто не использовать '' ([^ '] +)' '[как это] (https://regex101.com/r/xZ2rO6/1), если ваши« запятые »всегда граничат с скобками и нет экранированных '' 'в строке. –

ответ

2

Ваш "/\[[^\]]*\]/" соответствует только подстрокам, например [.[.[..].

Вы можете легко получить значение, используя

(?|\['([^][]*)']|'([^'\\]*(?:\\.[^'\\]*)*)') 

См regex demo, ваши ценности будут находиться в группе 1.

PHP demo:

$re = "/(?|\\['([^][]*)']|'([^'\\\\]*(?:\\\\.[^'\\\\])*)')/"; 
$str = "\$_['text_1']  = 'text_2 %d to %d of %d (%d text)';"; 
preg_match_all($re, $str, $matches); 
print_r($matches[1]); 

Регулярное выражение содержит 2 вариант с 2 захватом группы с индексом 1, так как используется группа сброса сброса (?|..|..). В 2 альтернативы совпадает:

  • \['([^][]*)'] - буквальный [', а затем с 0 или более чем ] и [ символов до ']
  • '([^'\\]*(?:\\.[^'\\]*)*)') - любая подстрока внутри одиночных кавычек, которые могут содержать любые ушедшие последовательности.

Или безопаснее один, который также позволит любому [ или ] внутри первой группы (то есть, если у вас есть $_['P[O]ST'], хотя я предполагаю, что это маловероятно):

(?|\['([^']*(?:'(?!])[^']*)*)'\]|'([^'\\]*(?:\\.[^'\\]*)*)') 

См another demo

+0

Спасибо, сэр. Я получаю все значение, которое мне нужно, с вашим регулярным выражением и substr substr ($ matches [0] [0], 2, -2); –

+0

Понятия не имею, почему вы получаете доступ к 0-му элементам, вам просто нужен 1-й. –

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