カスタムアラーム監視テキストおよび電子メールアラートシステムの特定の値を取得しようとしていますが、ある程度成功しています。ただし、エンジンに供給されるデータが散発的になることがあるため、現在の正規表現システムは機能しません。
たとえば、これは私が電子メールで受け取ったものとそれが得ることができるフォーマットの例です:
例:
CS#: A192255
Site Name: Home Alarm
Date and Time: Oct 1 2012 7:37AM =
User #: 17
User Name: User# 17 Event: =
CEE400 - OPEN Zone: E401 - =
Caller_ID: =0A=
=0D
以前はファイルを 1 行ずつ読んでいましたが、うまくいきましたが、いくつかのアイテムが同じ行に表示されてしまい、私を爆破しました。ここで、電子メール ファイル全体を読み、興味のある項目を検索します。
関連するオブジェクトを見つけるために、次の REGEX アイテムを使用しています。: セパレーターを使用する人もいますが、EVENT でわかるように、値は最終的に次の行にあり、通常の正規表現を台無しにします。
正規表現
>/CS#:(.*?)A[0-9]{6}/
/Site Name:(.*?)[a-zA-Z0-9\'\"\-\_\[\]\s]{0,30}[\r\n]/
/Date and Time:(.*?)[a-zA-Z]{3}(.*?)[0-9]{1,2}(.*?)[0-9]{4}(.*?)[0-9]{1,2}:[0-9]{2}[a-zA-Z]{2}/
/CEE[0-9]{3}|CIE[0-9]{3}/ - For the EVENT: line
/Zone:(.*?)[0-9]{1,3}[a-zA-Z0-9\s\'\"\-\_\[\]\s]{0,50}+/
"/User #:(.*?)[0-9]{1,3}/
この特定の問題については、SITE NAME 項目で 30 文字まで、または改行に達するまでの文字列を探しています。それが機能しているように見えた後、次のメールを受け取り、「= 20」文字までキャプチャしました。
例 2
CS#: A197789
Site Name: Made up name (F/A)
111E 1st Street=20
Somewhere, AZ 99999
Date and Time: Oct 1 2012 9:14AM
Event: CEE602 - TIMER TEST
Zone: E602 - Caller_ID: timer test
Site Phone 1:
Site Phone 2:=20
System Description: NX 8 Caddx LF=0A=
=0D
誰かが私の素朴な正規表現アイテムを見て、より良い解決策を見つけるのを手伝ってくれたら、とても感謝しています!