需要帮助创建一个正则表达式(NSClient ++)

时间:2014-05-19 08:41:24

标签: regex

如果内部有 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否则我仍然希望得到它! :)

问候, 塞德里克

1 个答案:

答案 0 :(得分:1)

困难的部分是将一个部分(SubjectMember ...)与另一部分区分开来:我们不想匹配任何 Security ID 。这个正则表达式依赖于两个空格缩进来区分它们。

在第一个捕获组中捕获了所需的行,请参阅demo here

(?m)Member:\n(?:  .*\n|\n)*?(^   *Security ID:[^$\n]*$)
  • (?m)只是打开多行标记m
  • 的内联方式
  • ^[^$\n]*$仅匹配不包含$
  • 的行
  • \S只匹配任何类型的空格(没有换行符,标签符号......)
  • (?: \S.*\n)*?匹配由两个空格缩进的任意数量的行