2017-08-10 25 views
0

をキャプチャ、私は次のように文章中の文字列の特定のグループをキャプチャしたい:正規表現 - オプションの文字列

Agent/889 (SIP/1011 from SIP/1011) blablabla (Not in use) blablabla (last was 6 secs ago) 

Agent/889 (SIP/1011 from SIP/1011) blablabla (Unavailable) blablabla 

私はこの正規表現に必要なすべての情報取得:しかし

Agent\/(\d{3})\s\(SIP\/(\d{4}).*\).*(In use|Not in use|Unavailable)\).*

を、私は#4グループを取得したいと思います。存在する場合、「最後は#secs前」のコンテンツを取得します。私はそのような正規表現を試してみた:

Agent\/(\d{3})\s\(SIP\/(\d{4}).*\).*(In use|Not in use|Unavailble)\).*(last was \d{1,} secs ago)?

しかし、#4グループ常に文字列を正規表現でテキストが含まれている場合でも、配列内のブランク値を取得します。私はPHPのpreg_match_all関数を使用しています。このサイトでシミュレートしています:PHP Live Regex

+0

ところであなたは利用不可 – marvel308

答えて

2

次の正規表現

Agent\/(\d{3})\s\(SIP\/(\d{4}).*\).*(In use|Not in use|Unavailable)\)(?:\w*\s*)*(\(last was \d{1,} secs ago\))? 

を使用することができますdemo herehere

+0

非常に良いタイプを持っているを確認してください! "最後に"という文字列が存在しない場合、新しい行にキャプチャしないよう少し変更しました:エージェント\ /(\ d {3})\ s \(SIP \ /(\ d {4})。* \ )\ *(\最後に\ d {1、}秒前\))?*(使用中|未使用|使用不可)\)(?:\ w * [\ r \ t \ f] –