2009-08-28 16 views
0

*拡張正規表現(ERE)をサポートする* NIXシステムと言語でうまく動作する正規表現があります。私はEREをサポートする.NET用の自由に利用できるライブラリを見つけていないし、これを非EREに変換して同じ結果を得ようとするのは幸いではない。拡張正規表現を.NET互換に変換するRegEx

^\+(<{7} \.|={7}$|>{7} \.) 

背景:ここでは正規表現である正規表現のポイントは、与えられた文字列が未解決subversionのマージからマーカーを有するように見えるかどうかを確認することです。

答えて

0

本当に入力ミスがありませんか? RegexBuddy(POSIX EREまたはGNU EREに設定されている場合)は、 "+"量子の前に繰り返し可能なトークンが必要であると言います。それ以外は、これは有効な.NET正規表現のようです。正規表現についての素晴らしいO'Reillyの書籍の1つをチェックしたいかもしれません。これで問題が解決しない場合は、一致する/一致しないテキストの例を投稿してください。

+0

これはタイプミスではなく、OPはコードフォーマットを使用していないため、SOソフトウェアがいくつかの文字を食べました。 –

3

It looks to me ERE構文のようなものは、ほとんどの他の "Perl互換"フレーバー(Perl、PHP、Python、JavaScript、Ruby、Java ...)と同様に、.NETの正規表現のフレーバーとほとんど上位互換です。言い換えれば、ERE正規表現でできることは何でも、同じ.NET正規表現で実行できるはずです。確かにあなたの例:

^\+(<{7} \.|={7}$|>{7} \.) 

は、EREに行うように.NETで同じことを意味します。私が見ることができる唯一の大きな例外はPOSIX bracket expressionsです。 .NETはUnicode標準に準拠しています。

あなたがに行くときにを適用すると、実際に異なるものになる正規表現が適用されます。 C#では次のようなその正規表現を適用される場合があります:

string result = Regex.Match(targetString, @"^\+(<{7} \.|={7}$|>{7} \.)").Value; 

C#の逐語的文字列をあなたには、いくつかの他の言語のようにバックスラッシュをエスケープする必要が保存「文字列リテラル。あなただけがそれらを倍にすることによって行う引用符をエスケープする必要があります。

@"He said, ""Look out!"""; 

それは、あなたの質問に答えるのか?

+0

それは答えませんでしたが、私は何か新しいことを学びました - 私はC#が二重引用符をエスケープする方法を許していることに気づいていませんでした。私は文字列リテラルを宣言するために "@"を使用していました。 –