0

この文字列からグループの数を取得したい -

%May 11 10:03:49:448 2000 AB-CDE SHELL/6/SHELL_CMD: -Task=vt0-IPAddr=172.0.0.0-User=manager; Command is display info
%May 11 10:03:51:122 2000 AB-CD-E SSH/6/SSH_LOGOUT: STEL user manager (IP: 172.0.0.0) logged out.

私が書いた正規表現は次のとおりです-

^%(\w{3})\s+(\d+)\s*([0-9]+\s?:\s?[0-9]+\s?:\s?[0-9]+):[0-9]+\s*(\d{4})?\s*\S*\s*(.*)/(\d+)/\S*:(.*);(.*)

これにより、最初の行から次のグループがキャプチャされます -

1. Group: May
2. Group: 11
3. Group: 10:03:49
4. Group: 2000
5. Group: SHELL
6. Group: 6
7. Group: -Task=vt0-IPAddr=172.0.0.0-User=manager
8. Group: Command is display info

; がないため、これは 2 行目を選択しません。最後のセクションで。

グループ7を任意にしてみた

^%(\w{3})\s+(\d+)\s*([0-9]+\s?:\s?[0-9]+\s?:\s?[0-9]+):[0-9]+\s*(\d{4})?\s*\S*\s*(.*)/(\d+)/\S*:(.*);?(.*)

出力:

1.1 Group: May
1.2. Group: 11
1.3. Group: 10:03:49
1.4. Group: 2000
1.5. Group: SHELL
1.6. Group: 6
1.7. Group: -Task=vt0-IPAddr=172.0.0.0-User=manager; Command is display info
1.8. Group:

2.1. Group: May
2.2. Group: 11
2.3. Group: 10:03:51
2.4. Group: 2000
2.5. Group: SSH
2.6. Group: 6
2.7. Group: STEL user manager (IP: 172.0.0.0) logged out.
2.8. Group:

それでも私の要件を満たしていません。なぜ 1.7 ラインがこぼれないのですか? そして、2.7 の出力を 2.8 に入れたいのですが、2.7 は 2 行目にないので空にする必要があります。

正規表現を使用してこれを達成する方法はありますか?

4

1 に答える 1

1

非キャプチャ オプション グループ ( (?:)) を使用:

^%(\w{3})\s+(\d+)\s*([0-9]+\s?:\s?[0-9]+\s?:\s?[0-9]+):[0-9]+\s*(\d{4})?\s*\S*\s*(.*)/(\d+)/\S*:(?:(.*);)?(.*)

これにより、グループ 7 がオプションになります。

使用法: https://regex101.com/r/oS3bN6/1

于 2016-06-22T05:45:41.443 に答える