2013-11-07 2 views
0

Я использую следующее выражение:Плагин SourceCookifier и многострочное регулярное выражение?

^\s*(\w+)\s*:\s*(\w+)[\r\n\s]+(port|generic) 

найти все экземпляры кода, такие как:

I1 : ITT_example_design 
     PORT 

, который является результатом многострочный. Однако это не работает, но DOES работает в функции поиска Notepad ++. Какие-нибудь идеи, что не так?

ответ

1

CTags регулярных выражения модель работает только на отдельных строках коды, а не на нескольких строках сразу. Таким образом, вам необходимо реализовать свои потребности in the parser itself.

1

Прежде всего [\r\n\s] в вашем регулярном выражении бесполезно, так как \s является надмножеством [\r\n]. Поэтому его можно упростить до ^\s*(\w+)\s*:\s*(\w+)\s+(port|generic).

Notepad ++ & SourceCookifier/CTags используют разные двигатели регулярных выражений. N ++ использует PCRE, в то время как CTags использует стиль POSIX (я не уверен на 100% для последнего, может ли кто-нибудь подтвердить?).

Таким образом, классы символов \w, \s не применяются в корпусе SourceCookifier. Измените их соответствующим [:word:], [:space:] соответственно.

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

[[:space:]]*([[:alnum:]]+)[[:space:]]*:[[:space:]]*([[:alnum:]_]+)[[:space:]]+(PORT|GENERIC) 
+0

ОК, поэтому я принял ваш совет и переключил свой REGEX на^[[: space:]] * ([[: alnum:]] +) [[: space:]] * \: [[: space:]] * ([[: alnum:]] +) [[: space:]] * [[: cntrl:]] + [[: space:]] * PORT, но ничего не нашел? Что мне не хватает? – Skrell

+0

1) Попытайтесь добавить звездочку после '[[: cntrl:]] *' вместо плюса 2) Я думаю, что вам не хватает символа подчеркивания '[[: alnum:] _]' (проверьте мой ответ) 3) если нет из вышеприведенных работ, попробуйте «разложить» регулярное выражение, и я имею в виду, что сначала попробую проверить, соответствует ли '([[: alnum:]] +), если да, а затем добавить вверх, пока вы не достигнете желаемого результат. – psxls

+0

Коррекция:^[[: пробел:]] * ([[: alnum:]] +) [[: space:]] * \: [[: space:]] * ([[: alnum:] _] +) [[: space:]] * [[: cntrl:]] + [[: space:]] * PORT не работает – Skrell

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