2012-06-27 4 views
1

Я пишу строчную конфигурацию Sublime Text 2 для grails, которая включает в себя регулярное выражение (стиль perl) для синтаксического анализа сообщений об ошибках в файлах, строках, столбцах и частях сообщений. Ошибки происходят из Грааль CLI в следующем формате:Reorder Regex Match Groups

{Project_Directory}/SourceFile.groovy: 19: errror_message @ line 19, column 5. 

Мое текущее регулярное выражение соответствует всем четыре части, но Sublime, кажется, требует, чтобы матчи происходят в порядке, то есть совпадение группа 1 = имя файла, 2 = номер строки, 3 = номер столбца, 4 = сообщение об ошибке. Grails сообщает элементы 3 и 4 в обратном порядке, поэтому мне нужно написать регулярное выражение, которое поместит номер столбца в группу соответствия 3 и сообщение об ошибке в группе 4. Мое текущее регулярное выражение (которое соответствует, но не отбрасывает группы 3 и 4) выглядит следующим образом:

^(.+?): (\d+): (.+?) \@ line \d+, column (\d+)\.$ 

Любые идеи? Возможно ли это? Кто-нибудь знает, может ли возвышенное принять именованные группы вместо нумерованных групп?

ответ

1
^(.+?): (\d+): (?=.+? \@ line \d+, column (\d+)\.$)(.+?) \@ 

лучше (меньше откат при неудаче):

^([^:]+): (\d+): (?=[^@]+ \@ line \d+, column (\d+)\.$)([^@]+) \@ 
+0

К сожалению, [Rubular] (http://rubular.com/r/hf9NKiY6QS) показывает, что это не имеет соответствий в заданной строке ошибки , – therealmitchconnors

+0

Из всех пространств я думал, что вы используете/x. Исправлено и протестировано. – ikegami

+0

безупречный! гениальный способ использования утверждений нулевой ширины. Я не знал, что у вас может быть названная группа внутри. очень круто. Благодаря! – therealmitchconnors

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

  • Нет связанных вопросов^_^