2014-05-19 48 views
1

如果存在NO $ -sign,我需要使用正則表達式(NSClient ++中的「filter = regexp」)來獲取特定行(標記爲「< - 」)它內部有。 下面是我必須搜索的文本樣例的示例(它是從事件日誌中描述的消息)。需要幫助創建一個正則表達式(NSClient ++)

A member was added to a security-enabled global group 

Subject: 
    Security ID: ... 
    Account Name: ... 
    Account Domain: ... 
    Logon ID: ... 

Member: 
    Security ID: ... <-- 
    Account Name: ... 

Group: 
    Security ID: ... 
    Group Name: ... 
    Group Domain: ... 

Additional Information: 
    ... 

因此,如果與「安全標識」開始「會員」 內的線路不包含$ -sign然後我需要的正則表達式的輸出是「安全ID:......」否則應該沒有輸出。

我嘗試了一些不同的東西,但我沒有得到我的工作完全正確的:

/(?<=Member:[\n]).*(Security ID:((?![$]).)*)(?=[\n].*Account Name:)/s 

- >錯誤,如果有「安全ID ...」和「帳戶名之間的線路。 ..「和接縫回報兩場比賽。

所以也許有人可以幫助我。 ;)

更新: 如何做到這一點,如果「成員」和「安全ID」之間也可能有多行?

UPDATE2: 其實這就是我的意思:

/(?m)^(?<=Member:[\n])(?:.|\n)*?(Security ID:[^$\n]*$)(?:.|\n)*?(?=Group:[\n])/ 

感謝您的幫助羅賓& AdamK否則我仍然希望得到它的權利! :)

問候, 塞德里克

+0

如果Sec ID和Acc號碼之間有一條線,那麼我就沒有任何匹配。 – AdamK

+0

我只在這裏試過,直到現在: http://regex101.com/#python and here: http://regex101.com/#pcre – Dobi

+0

@Dobi:Fyi在regex101上,您可以通過點擊來分享您的具體示例Ctrl + S或點擊左邊的「保存正則表達式」 – Robin

回答

1

難的是要區分不同部分(SubjectMember ...):我們並不想匹配任何Security ID。這個正則表達式依靠兩個空格縮進區分這些。

想要的行在第一個捕獲組中捕獲,請參閱demo here

(?m)Member:\n(?: .*\n|\n)*?(^ *Security ID:[^$\n]*$) 
  • (?m)只是開啓不包含m
  • ^[^$\n]*$只匹配線$
  • \S匹配任何不是任何形式的空白(不換行,標籤的多標誌的直列方式.. )
  • (?: \S.*\n)*?匹配縮進兩個空格的任意行數