регулярное выражение для { } внутри ' s

Пример,

У меня есть строка, содержащая, скажем:

основная функция {

// TODO print 'hello {cmd get world} world {nice}!'s asdads

}

Как я могу выбрать только слова, которые находятся внутри {} и которые находятся внутри строки. В этом примере будут получены выходные данные:

{команда получить мир; Приятно}

большое спасибо!


person luis    schedule 04.04.2011    source источник
comment
С экранированием или без него (из ', { и }) разрешено? Что, если '...' был встроен в строку (например, "...'{foo}'...")?   -  person Cameron    schedule 05.04.2011
comment
Regex не подходит для этого, гораздо лучше подойдет генератор синтаксических анализаторов.   -  person Ben Voigt    schedule 05.04.2011
comment
не включая {}, поэтому ответ должен быть таким:   -  person luis    schedule 05.04.2011


Ответы (1)


(?<='[^']+\{)[^\{\}]+(?=\}[^']+')

Должен сделать трюк.

Изменить: регулярное выражение обновлено для использования просмотра назад и опережения.

Изменить 2: регулярное выражение теперь соответствует только тексту внутри фигурных скобок и ничему другому.

person Håvard    schedule 04.04.2011
comment
Неа. \'[^'].*?{([^}]*)}.*?'\, то будет получен первый {}, но не второй {}. Вы также можете просто использовать \'([^']*)'\ для получения первой части, а затем \{([^}]*)}\ для получения всех совпадений в ней. - person Joseph Lust; 05.04.2011
comment
похоже, не работает regexpal.com/?flags=®ex=% 5C'%5B^'%5D*%5C{(%5B^%5C}%5D%2B)%5C}%5B^'%5D*%5C'&input=function%20main%20{% 0A%0A%20%2F%2F%20TODO%0A%20print%20'hello%20{cmd%20get%20world}%20world%20{nice}!'s%20asdads%0A%0A} - person luis; 05.04.2011
comment
Я уже обновил ответ 5 минут назад и проверил его. Этот должен работать. @luis, @Twisted Pear - person Håvard; 05.04.2011
comment
для случая function main { // TODO print 'hello {cmd as s}wo{lol}rld!' } он выбирает до rld!' на второй выбор - person luis; 05.04.2011
comment
@луис, ты уверен? Я только что протестировал его на RegexHero, и он отлично работает (выбирает cmd as s и lol). - person Håvard; 05.04.2011