我们使用两种不同的方法来引用外部文档和Bugzilla错误编号。
我现在正在寻找一个正则表达式,该表达式匹配引用字符串的这两种可能性,以便在TortoiseSVN 1.6.16日志屏幕中方便地显示和链接。首先应该是表单[BZ#123]的bugzilla条目,其次是[some text and numbers],它不需要转换为url。
这可以与
\[BZ#\d+\]和
\[.*?\]我现在的问题是将这两个匹配字符串连接在一起。通常,这是由regex (第一次\第二次)完成的,我是这样做的:
(\[.*?\]|\[BZ#\d+\])不幸的是,在这种情况下,由于圆括号,TortoiseSVN似乎将其全部捕获为bug号。即使我添加了第二个表达式(根据文档)用于提取问题号本身,第二个表达式也应该被忽略:
(\[.*?\]|\[BZ#\d+\])
\[BZ#(\d+)\]在本例中,TortoiseSVN在单独的列中正确地显示错误和文档引用,但将它们完全用于bugtracker url,这当然不起作用:
https://mybugzillaserver/show_bug.cgi?id=[BZ#949]顺便说一下,Mercurial使用{1},{2},.作为URL中的占位符。
有谁知道如何解决这个问题吗?
编辑
简而言之:我们使用BZ#123作为bug编号引用,使用任意文本作为其他(部分非电子)文档的引用。我们希望在TortoiseSVN的额外列中列出这两种模式,但是在URL字符串中只使用第一部分shpuld中的bug号作为%BUGID%。
编辑2
据推测,TortoiseSVN不能处理嵌套正则组(圆括号),因此这个问题目前没有任何令人满意的答案。
发布于 2011-07-18 23:18:10
我对TortoiseSVN regex并不熟悉,但问题是,正则表达式的第一部分([.*?\])总是匹配的,所以您甚至都无法找到评估第二部分的部分,\[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会发生什么?
https://stackoverflow.com/questions/6692445
复制相似问题