2016-04-14 14 views
0

この正規表現が正しく動作するようにしようとしましたが、それはできないようです。 正規表現12時間タイムスタンプとタイムエンドのサポート

は、私は基本的に倍のこれらの組み合わせをピックアップする正規表現が必要:

12am 
12:30am 
12am - 12pm 
12:30am - 1:30am 
12:30 - 1:30am 
12 - 1:30am 

私が追加した場合は?私の([a | p] m)セクションの後ろで、正規表現は私がしたくない数字にマッチします。

はここに私の正規表現のコードです:

(?:(1[012]|[1-9]):([0-5][0-9])|(1[012]|[1-9])) ?([a|p]m)(?:\s-\s(?:(1[012]|[1-9]):([0-5][0-9])|(1[012]|[1-9])) ?([a|p]m))? 

すべてのヘルプは高く評価され、ありがとうございました。

+0

https://regex101.com/r/gN1qS7/3で十分習慣? – rock321987

+0

いくつかの場所で '?'を追加する必要がありました([demo](https://regex101.com/r/cN7yK1/1)参照)。 –

+0

@ rock321987これはトリックだと思われますが、まだそれ自身で "12"をピックアップしています。私は電子メールの内容でこの正規表現を実行しています。たとえば、 "12月2日"と一致します。 –

答えて

1

これは、作業を行います。

((?:1[0-2]|\d)(?:\:[0-5]\d)?(?:[ap]m)?)[\s-]+((?:1[0-2]|\d)(?:\:[0-5]\d)?(?:[ap]m)?) 

Live Demo

説明(第2のグループは最初のものと同じである):

1st Capturing group ((?:1[0-2]|\d)(?:\:[0-5]\d)?(?:[ap]m)) 

(?:1[0-2]|\d) Non-capturing group 
    1st Alternative: 1[0-2] 
     1 matches the character 1 literally 
     [0-2] match a single character present in the list below 
      0-2 a single character in the range between 0 and 2 
    2nd Alternative: \d 
     \d match a digit [0-9] 
(?:\:[0-5]\d)? Non-capturing group 
    Quantifier: ? Between zero and one time, as many times as possible, giving back as needed [greedy] 
    \: matches the character : literally 
    [0-5] match a single character present in the list below 
     0-5 a single character in the range between 0 and 5 
    \d match a digit [0-9] 
(?:[ap]m) Non-capturing group 
    [ap] match a single character present in the list below 
     ap a single character in the list ap literally (case insensitive) 
    m matches the character m literally (case insensitive) 

[\s-]+ match a single character present in the list below 

Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy] 
\s match any white space character [\r\n\t\f ] 
- the literal character - 
+0

おそらくこの愚かなしかし、私はすべての4つの例が正規表現12を使用してピックアップする必要があります - 午後1時30分は、それがすべきときにピックアップされていません。 –

+0

@JohnnyDoey編集を参照してください –

+0

私はより多くの例で上記の投稿を編集しました。また、ある正規表現で可能ならば、正規表現で "12am - 1:30 am"などと一緒に "12am"をピックアップする必要があります。 –