2012-07-02 5 views
0

Я пытаюсь изолировать имя массива и размер массива от кода. Этот пример ожидаемого ввода:Regex get array number

blah_blah[blahvar] 
blah_ha[2] 
blah_[] 

Мне нужно, чтобы соответствовать имена (blah_blah, blah_ha, blah_) и текст внутри скобок (blahvar, 2 ''). У меня есть это регулярное выражение:

([a-zA-z_]+)(\[[a-zA-Z_]*\]) 

Но это не работает. Пожалуйста помоги.

+0

«Это не работает» - это * никогда * достаточно хорошее описание проблемы. Что не так? Совместимо ли это слишком много? Слишком мало? соответствовать правильным вещам, но у вас возникают проблемы с извлечением групп? –

+1

Возможно, это не причина вашей проблемы, но первая часть регулярного выражения ([a-zA-z _] +) имеет строчный «z» вместо верхнего регистра «Z», – mrzli

ответ

2

Вам необходимо включить номера:

([a-zA-z_0-9]+)(\[[a-zA-Z_0-9]*\])

Без этого, ваш второй пример blah_ha[2] не поймает (делают другие).

Сокращенный вариант (который фиксирует каждое слово символа (буквы, цифры и т.д.):

(\w+)(\[\w*\])

3

Используйте Это регулярное выражение

([\w]+)\[([\w]*)\] 

Группа 1 будет совпадать с именем массива и Группа 2 будет соответствовать индексу