2017-05-02 15 views
3

Regex.IsMatch()を使用して文字列とパターンの一致を検出しようとしています。私は正規表現をフレーム化し、regex101.comを使ってうまく動作するかテストしました。今問題は、 Regex.IsMatch(filename, curSetting.RegExMatch.ToString());が真を返すということです。 curSetting.RegExMatch.IsMatch(filename))は、同じファイル名に対してfalseを返します。誰かがこれとはどのように異なっているのか、その違いは何かを説明することはできますか?Regex.IsMatchはC#で2つの異なる出力を返します。

RegExMatchは、curSettingの私の正規表現のメンバーです。私の場合のテストデータはパターンです

Gen(?!.*(?:erallog))(?<SerialNo>.+?)-(?<Year>(?:\d{2}))(?<Month>\d{2})(?<Day>\d{‌2})(?<Other>.*?\.log‌) 

文字列は1_GeneralLog1370013-170403.logです。

+0

フル関連するコードを共有してください。 'curSetting.RegExMatch'パターンとは何ですか? 'filename'値は何ですか? –

+0

あなたがパターンとあなたが検索しているテキストを投稿しているときに役立ちます。そして、これはあなたを助けるでしょう[regex testerで動作する正規表現ですが、C#では使えません](http://stackoverflow.com/questions/24687028 /正規表現作業中の正規表現テスター、しかしCシャープではない) –

+0

'RegExMatch'はどのようなタイプですか?聞いたことがない。 –

答えて

2

あなたのcurSetting.RegExMatchRegexOptions.IgnoreCaseフラグ付きでコンパイルされていることは明らかである:(?!.*(?:erallog))は大文字と小文字を区別せずに処理し、あなたの1_GeneralLog1370013-170403.log入力文字列にeralLogと一致するので、負の先読みパターンが一致するものを見つけて、全体的な試合を失敗しています。

ので、2通りの方法が(何が必要に応じて)そこにいる:

  • どちらのパターンに大文字と小文字を区別しないinlineオプション(?i)を追加正規表現オブジェクトの初期化からRegexOptions.IgnoreCaseまたは
  • を削除します:

    ​​

関連する問題