正则表达式(多行) - 仅当所有行都不包含$时才匹配

时间:2016-05-10 12:10:00

标签: regex multiline

我需要正则表达式的帮助。 我有这样的文字,其中包含几行:

Message=A logon was attempted using explicit credentials.

Subject:
    Security ID:        NT AUTHORITY\SYSTEM
    Account Name:       SERVER1$
    Account Domain:     EXAMPLE.ORG
    Logon ID:       0x3E7
    Logon GUID:     {00000000-0000-0000-0000-000000000000}

Account Whose Credentials Were Used:
    Account Name:       user1
    Account Domain:     EXAMPLE.ORG
    Logon GUID:     {15CEA50D-0E2C-2FFC-6FDF-46CDFC48AE34}

Target Server:
    Target Server Name: localhost
    Additional Information: localhost

Process Information:
    Process ID:     0x38e0
    Process Name:       C:\Windows\System32\winlogon.exe

Network Information:
    Network Address:    10.9.8.7
    Port:           0

如果所有字符串都带有

,我需要一个匹配整个消息的正则表达式
 Account Name:

行之后是带有'$'

的文本

在此示例中,有两行"Account Name:" - 其中一行'$',第二行不应该匹配。如果有一行或多行"Account Name:",但所有行都包含'$',那么就匹配。

我尝过这样的不同之处:

(?s)Account Name:\s+(?!(\$))\n.*

但未能实现我的目标。

1 个答案:

答案 0 :(得分:2)

您可以使用:

(?s)^(?!.*\bAccount Name:[^$\n]*(?:\n|$)).*

此模式使用否定前瞻以确保没有没有$ -character的帐户名称,然后只匹配整个文本。