2011-08-09 16 views
0
私がしようとすると、この正規表現を理解するには、以下のテスターを使用してい

:( : http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashxグループの正規表現

マイ入力: 123stringA 456列B

私のパターンを(0 * 3))(。*?)

パターンは最終的に日付になりますが、この質問のために私は単純にして、簡単な入力を使用します。

私はこのパターンを理解する方法、それは「私に3つの数字を与えています[0-9] {3}、あらゆる種類の任意の数の文字が続く。*、それは次の試合?

に達するまで何私は/このテストの外に期待したい2つのグループそれぞれに2試合です:
マッチ1
     グループ1から123
     グループ2 - stringA
MATCH2
     グループ1から456
     グループ2 - 何らかの理由で列B

は、私が提供されたリンクのテスターは、第二のグループがあることを見ているが、それは空白まで来ています。前にPHPでこれを行いましたが、私が記述したように動作するように思えましたが、C#ではさまざまな結果が見られます。あなたが提供できるどんな助けでも感謝します。

私も、これは複数の行を拡大することができることに注意してください...

  • EDIT *

ここでは、実際の入力があります: 2011-08-09 09:25:57069 [9] Orchard.Environment.Extensions.ExtensionManager - エラーの読み込み拡張機能2011-08-09 09:25:57,493 [8] Orchard.Environment.Extensions.ExtensionManager

マッチ1の場合: 2011-08- 09 09:25:57および 、069 [9] Orchard.Environment.Extensions.ExtensionManager - 読み込みエラー拡張

と一致2: 2011-08-09午前9時25分57秒と 、493 [8] Orchard.Environment.Extensions。 ExtensionManager

私は、最初のグループは3と一致する1つの巨大なテキストファイルでのエラーログファイルを解析するための良い方法を見つけると、エラーが起きた日付とそれ

+1

何は、Visual Studioでそれをテストするかどうかを確認しますか? – BoltClock

+1

@tjansあなたは以前の質問に対する回答を受け入れるべきです。 – dlras2

答えて

2

と一緒に行きました細部を維持しようとしています2番目のグループは文字列の残りの部分と一致します。これは、.*?が残りの部分と一致しないようにパターンに何もないためです文字列のr。

訂正:2番目のグループは空の文字列と一致しないようにパターンに何もないので、空の文字列に一致します。.*?は空の文字列に一致しません。

+0

ああ、次の一致が始まる前に何らかの区切り文字を入力する必要があります。 – tjans

+0

'*?'はそれ以外のものにします - 文字列の残りの部分と一致しない_re_ – Mrchief

+0

@Mrchief:Oops!あなたが正しい。 – MRAB

1

.*は、0回以上何も一致することを意味します。 ?最小回数を見つけることを意味するので、最小値として0の一致を選択します。

このパターンを試してみて、([0-9]{3})([a-zA-Z]*)

+0

'*?'は非貪欲にします。 – Mrchief

+0

@Murchief、OK、それは私が言ったものではないですか? MSDNから*? 前の要素と0回以上一致しますが、できるだけ少ない回数で一致します。 – Kratz

+0

はい、OPではアルファだけでなく文字が必要なため、パターンは十分ではありません。 – Mrchief

0

ツールがいることをあなたに与えていますが、.NETで動作します。この代替パターンに切り替えることができますなぜわからない

([0-9]{3})([^0-9]*) 

http://regexhero.net/tester/?id=155b8e2b-b851-46b9-8a84-b82f8d6963a1

説明:

以前のパターンでは、nongreedy v ersionは0文字に一致していました。

新しいものでは、[^0-9]は、範囲0-9以外の文字に一致します(否定^指定に注意してください)。

更新:(コメントで)実際の入力文字列を考えると、パターンは(その推測はOPが何をしたいのか仮定に変更します。

,([0-9]{3})([^\n]*) 

http://regexhero.net/tester/?id=155b8e2b-b851-46b9-8a84-b82f8d6963a1

+0

面白い、それは実際に働く...私はなぜ...あなたが説明することができますか分からない? – tjans

+0

私はそれを次のものに適用しようとしています:2011-08-09 09:25:57,069 [9] Orchard.Environment。Extension.ExtensionManager - エラーの読み込み拡張 2011-08-09 09:25:57,493 [8] Orchard.Environment.Extensions.ExtensionManager - エラーコードの読み込み – tjans

+0

私の答えが更新されました。 – Mrchief

0

あなたのコメントによると、これはあなたが欲しいものです。

2011-08-09 09:25:57,069 [9] Orchard.Environment.Extensio ns.ExtensionManager - 読み込みエラー 拡張2011-08-09 09:25:57493 [8] Orchard.Environment.Extensions.ExtensionManager - 読み込みエラー 拡張この式は、最初の捕捉の日付と一致します

次の日付まで、または2番目のキャプチャグループの文字列の終わりまでの間、

(\d{4}(?:-\d{2}){2})(.*?)(?=(?:\d{4}(?:-\d{2}){2}|$)) 

は、それがhere on Regexr

+0

忍耐強い人に感謝します...元の質問を更新しました。私はこのショットを与えるでしょう... – tjans

+0

この1つは動作していないようです...私はそのパターンを実行すると0マッチを得る... – tjans

+0

Regexrで働いて、それをどのように使いますか?私の心のうちの1つは、あなたの正規表現をC#で作成するべきです:@ "(\ d {4}(?: - \ d {2}){2})(。*?)(?= \ d {4}(?: - \ d {2}){2} | $)) "となります。 @がなければ、二重エスケープが必要です。 – stema