2011-07-14 2 views
2

外部ドキュメントとBugzillaバグ番号を参照するのに2つの異なる方法を使用しました。TortoiseSVNで複数の参照文字列と一致する正規表現を探す

TortoiseSVN 1.6.16ログ画面で便利な表示とリンクを行うために、これらの2つの参照文字列に一致する正規表現を探しています。まず、[BZ#123]の形式のバグダイラのエントリでなければなりません。二番目は[some text and numbers]です。これはURLに変換されません。

これは私の問題は今、一緒にそれらの2つの試合の文字列を連結することである

\[BZ#\d+\] 

\[.*?\] 

と一致させることができます。通常、これは(最初|秒)の正規表現によって行われるだろう、と私はそれをこのようにやった:

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

残念ながら、この場合はTortoiseSVNは理由丸括弧のバグ番号としてそれをすべてキャッチしているようです。私は(マニュアルに従って)は、第2の発現が発行番号自体を抽出するために使用されることを意図され、この第二の発現は無視されることになって追加した場合でも:

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

この場合、TortoiseSVNは、バグを表示し文書の別の列に正しく参照するが、もちろん動作していないバグトラッカーのURLのための完全にそれらを使用しています。

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

ところで、Mercurialは、{2}、{1}を使用することによって、より良い方法を使用しています。.. 。をURLのプレースホルダとして使用します。

誰もがこの問題を解決する方法を持っていますか?要するに

EDIT:私たちは、他の(部分的に非電子)文書への参照として[anytext]バグ番号参照として[BZの#123]を使用してきました。両方のパターンをTortoiseSVNの余分な列に表示したいのですが、最初の部分のバグ番号だけがURL文字列の%BUGID%として使用されます。

EDIT 2

たぶんTortoiseSVNは、ネストされた正規表現のグループ(丸括弧)を扱うことができないので、この質問は、現時点ではすべての満足のいく答えを持っていません。

答えて

1

私は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がlookbehindsをサポートしていない可能性があります。

Bug-ID expression(\d+)を使用するとどうなりますか?

+0

私は今試しましたが、TortoiseSvnのBug-ID列には何の兆候もありません。また、私はパターンを認識していない?<=あなたの正規表現でも、私はそれをhttp://www.regular-expressions.info/reference.htmlで見つけることができません。これを私に説明してもらえますか? –

関連する問題