Ищем регулярное выражение для соответствия более чем одной ссылочной строке в TortoiseSVN - PullRequest
2 голосов
/ 14 июля 2011

Мы использовали два разных метода для ссылки на внешние документы и номера ошибок Bugzilla.

Сейчас я ищу регулярное выражение, которое соответствует этим двум возможностям ссылочных строк для удобного отображения и связывания в TortoiseSVN 1.6.16 экран журнала.Во-первых, должна быть запись об ошибке в форме [BZ#123], вторая - [some text and numbers], которая не должна быть преобразована в URL.

Это может быть сопоставлено с

\[BZ#\d+\]

и

\[.*?\]

Теперь моя проблема - объединить эти две строки совпадений.Обычно это делается регулярным выражением (first | second), и я сделал это следующим образом:

(\[.*?\]|\[BZ#\d+\])

К сожалению, в этом случае TortoiseSVN, кажется, перехватывает все это как номер ошибки из-за раундабрекеты.Даже если я добавлю второе выражение, которое (согласно документации) должно использоваться для извлечения самого номера проблемы, это второе выражение должно игнорироваться:

(\[.*?\]|\[BZ#\d+\])
\[BZ#(\d+)\]

В этом случае TortoiseSVN отображаетссылки на ошибки и документы правильно отображаются в отдельном столбце, но они полностью используются для URL-адреса bugtracker, который, конечно, не работает:

https://mybugzillaserver/show_bug.cgi?id=[BZ#949]

Кстати, Mercurial использует лучший способ, используя {1}, {2}, ... как заполнитель в URL.

Кто-нибудь знает, как решить эту проблему?

EDIT

Короче говоря: мыиспользовали [BZ # 123] в качестве ссылок на номера ошибок и [anytext] в качестве ссылок на другие (частично не электронные) документы.Мы хотели бы, чтобы оба шаблона были перечислены в дополнительном столбце TortoiseSVN, но в качестве% BUGID% в строке URL-адреса должен использоваться только номер ошибки из первой части.

EDIT 2

Предположительно, TortoiseSVN не может обрабатывать вложенные группы регулярных выражений (круглые скобки), поэтому на этот вопрос пока нет удовлетворительного ответа.

1 Ответ

1 голос
/ 19 июля 2011

Я не знаком с регулярным выражением TortoiseSVN, но проблема выглядела так, что первый фрагмент регулярного выражения ([.*?\]) всегда совпадал, так что вы никогда не дойдете до части, оценивающей вторую часть, \[BZ#(\d+)\]

Попробуйте вместо этого:

((?<=\[BZ#)\d+(?=\])|\[.*?\])

Пояснение:

(           #Opening group.
(?<=\[BZ#)  #Look behind for a bugzilla placeholder.
\d+         #Capture just the digits.
(?=\])      #Look ahead for the closing bracket (probably not necessary.)
|           #Or, if that fails,
\[.*?\]     #Find all other placeholders.
)           #Closing the group.

Редактировать: Я только что посмотрел на документы TortoiseSVN. Вы также можете попытаться сохранить Message part expression прежним, но изменить Bug-ID expression на:

(?<=\[BZ#)(\d+)(?=\])

Редактировать: ?<= представляет вид сзади нулевой ширины. См. http://www.regular -expressions.info / lookaround.html . Возможно, TortoiseSVN не поддерживает внешний вид.

Что произойдет, если вы просто используете (\d+) для Bug-ID expression?

...