如果内部有 NO $ -sign ,我需要使用正则表达式(NSClient ++中的“filter = regexp”)来获取特定行(标有“< - ”)它的。 下面是我必须搜索的文本的示例(它是一个描述消息形成一个事件日志)。
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:
...
因此,如果在“Member”中以“Security ID”开头的行不包含$ -sign ,那么我需要正则表达式的输出为“安全ID:... “否则应该没有输出。
我尝试了一些不同的东西,但我不能让我完全正确地工作:
/(?<=Member:[\n]).*(Security ID:((?![$]).)*)(?=[\n].*Account Name:)/s
- &GT;错误,如果“安全ID ...”和“帐户名称...”之间有一条线,并且接缝可以返回两个匹配项。
所以也许有人可以帮助我。 ;)
更新 如果“会员”和“安全ID”之间也可以有多行,怎么办?
UPDATE2: 实际上这就是我的意思:
/(?m)^(?<=Member:[\n])(?:.|\n)*?(Security ID:[^$\n]*$)(?:.|\n)*?(?=Group:[\n])/
感谢您的帮助Robin&amp; AdamK否则我仍然希望得到它! :)
问候, 塞德里克
答案 0 :(得分:1)
困难的部分是将一个部分(Subject
,Member
...)与另一部分区分开来:我们不想匹配任何 Security ID
。这个正则表达式依赖于两个空格缩进来区分它们。
在第一个捕获组中捕获了所需的行,请参阅demo here。
(?m)Member:\n(?: .*\n|\n)*?(^ *Security ID:[^$\n]*$)
(?m)
只是打开多行标记m
^[^$\n]*$
仅匹配不包含$
\S
只匹配任何类型的空格(没有换行符,标签符号......)(?: \S.*\n)*?
匹配由两个空格缩进的任意数量的行