正则表达式:组需要在第一次出现时停止

正则表达式:组需要在第一次出现时停止

我不擅长编写正则表达式查询(我是 Google 复制/粘贴正则表达式的用户 :) ),但它适用于大多数搜索结果。我在 Splunk 搜索中使用正则表达式输出,因此有时可能需要进行一些调整。
目前我遇到了以下问题,我不知道为什么会发生这种情况,以及如何解决它:

原始搜索结果:

Identity "mailboxname" -User "mailboxalias" -AccessRights ("FullAccess")</Data><Data>domain.fqdn/OU1/OU2/Display Name User</Data><Data>S-1-x-11111-1111-2222-2222</Data><Data>S-1-x-3333-4444-5555</Data>

带组结果的正则表达式查询:

(?m)domain.fqdn/OU1/OU2/(?<Affected_Mailbox>.+)\</Data><Data>S-

因此,我假设我的“Affected_Mailbox”结果为“显示名称用户”,但由于某些奇怪的原因,我得到了以下结果: Display Name User</Data><Data>S-1-x-11111-1111-2222-2222

粗体部分不应该出现在那里...有人可以指导我找到一个可行的解决方案吗?(注:我正在使用 regex101.com 来“调整”我的查询)。

非常感谢 Danny

答案1

编写正则表达式查询的第一件事是指定哪个使用了几种不太兼容的正则表达式。从你的问题中不能完全清楚正则表达式本身是输入到 Splunk,还是输入到 PowerShell 之类的程序。(输入到哪里其实并不重要输出去!)

但似乎 Splunk 本身使用“PCRE”(Perl 风格)正则表达式语法,并且 .NET(PS)也声称与 Perl 基本兼容,因此两种情况下的答案应该是相同的。

在 PCRE 正则表达式中(实际上是 Regex101 中当前可用的所有风格),您可以将+运算符与结合起来?以将其标记为“非贪婪”,例如.+?尽可能少地匹配。

对于不支持此功能的正则表达式(例如 POSIX 正则表达式),您可以用.明确排除“边界”字符的括号表达式替换 。例如,如果您只想匹配到下一个<,则可以使用[^<]+而不是.+

相关内容