2016-06-15 10 views
0

正規表現を使用して、Jan 12, 2015またはFeb 3, 1999という形式の日付文字列を検索しています。正規表現以外の日付と一致する正規表現

私が使用している正規表現は\w+\s\d{1,2},\s\d{4}あり、それが正常に動作していますが、事は、ファイルに、フォームといくつかの文字列であるということである。 Weg 58, 4047またはStrasse 1, 4482、私はまた、それらを一致させます。

これらの日付以外の一致を避けるにはどうすればよいですか?私のアプローチは次のとおりです。

  1. 最初の文字列(など、月の1、JanFebは、)は、常に長さ3
  2. 年は1または2で開始する必要が持っている必要があります。

私の正規表現にこれらの2つのオプションを追加するにはどうすればよいかわかりません。助けてください?

あなたは正しいここでテストを行うことができます。事前にhttps://regex101.com/r/bN2pO0/1

感謝を。

+0

で始まる年を選択するか、|演算子を使用することができますうるう年。 – everton

+0

うるう年と正規表現の問題はどこにありますか? –

+1

場合によっては2月29日が有効で、ときどき有効ではありません。 – everton

答えて

1

ヶ月が変更されませんので(例:1月の間に一貫した値 - Decemeberを、私たちは3つの出発文字を入れることができます)。

私たちは、あなたがのために偽陽性を得ることができますように私は、日付の検証のための正規表現を使用しないようお勧めする1または2

/((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{1,2},\s(1|2)\d{3})/ig 

https://regex101.com/r/bN2pO0/3

+0

これは、日付だけではなく、年全体と一致します。これは私が探しているものです。 –

+1

あなたはタイプミスがあります。あなたは '1'の代わりに'! 'を持っています –

+0

@Borjaはその問題を解決しました。マッチグループ1は完全な日付になります。 –

1

\d{1,2}を1桁または2桁、\d{4}を数字と4桁で一致させるのと同じように、\w{3}を使用して単語文字を3回一致させることができます。

年にパイプ "または"演算子|を使用できます。

\w{3}\s\d{1,2},\s(?:1|2)\d{3} 

これはまた、あなたがしたい場合、あなたは強引なアプローチで行くか、単に正規表現を取り除くと日付をキャプチャするために、コードを使用することができます

1xyz、フォームのABCのxyの非日付と一致します、が、 。

ブルートフォース:

(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s[0-2]?[0-9],\s[12]\d{3} 
関連する問題