我有一个PowerShell脚本,用于匹配以下正则表达式:
匹配的字符串来自以下日志文件片段:
10/26/16 11:41:26 - 进程(15925376.4) 用户(mqm) 程序(amqzmuc0) 主机(aixmq1) 安装(Installation1) VRMF(8.0.0.4) 队列管理器(ecs.queue.manager) AMQ6287: WebSphere MQ V8.0.0.4 (p800-004-151017).
解释:WebSphere MQ系统信息:主机信息 :- AIX 7.1 (MQ AIX 64位) 安装 :- /usr/mqm (Installation1) 版本 :- 8.0.0.4 (p800-004-151017) 操作:无。
在perl和regexr.com中使用这个正则表达式,它可以完美地匹配日志文件片段中的两个部分。
现在我已经在powershell中实现了相同的正则表达式,除非我删除\n前面的减号,否则它将不会返回任何匹配。如果我用一个只包含减号的匹配组替换这些减号,它也可以工作。
为了保持一致性并理解正在发生的事情,我需要了解为什么匹配行为在powershell中如此不同。为什么只要开头有减号就不匹配?
以下.NET正则表达式测试程序显示与powershell相同的行为: 请问有人能解释一下为什么PowerShell中的匹配行为与Perl/regexr.com有这么大的不同吗?
这是我目前正在使用的PowerShell代码片段来匹配该正则表达式:
---\n(0[1-9]|1[0-2][\/](0[1-9]|[12]\d|3[01])[\/]\d{2}[\s\S]+?)-----
匹配的字符串来自以下日志文件片段:
10/26/16 11:41:26 - 进程(15925376.4) 用户(mqm) 程序(amqzmuc0) 主机(aixmq1) 安装(Installation1) VRMF(8.0.0.4) 队列管理器(ecs.queue.manager) AMQ6287: WebSphere MQ V8.0.0.4 (p800-004-151017).
解释:WebSphere MQ系统信息:主机信息 :- AIX 7.1 (MQ AIX 64位) 安装 :- /usr/mqm (Installation1) 版本 :- 8.0.0.4 (p800-004-151017) 操作:无。
在perl和regexr.com中使用这个正则表达式,它可以完美地匹配日志文件片段中的两个部分。
现在我已经在powershell中实现了相同的正则表达式,除非我删除\n前面的减号,否则它将不会返回任何匹配。如果我用一个只包含减号的匹配组替换这些减号,它也可以工作。
为了保持一致性并理解正在发生的事情,我需要了解为什么匹配行为在powershell中如此不同。为什么只要开头有减号就不匹配?
以下.NET正则表达式测试程序显示与powershell相同的行为: 请问有人能解释一下为什么PowerShell中的匹配行为与Perl/regexr.com有这么大的不同吗?
这是我目前正在使用的PowerShell代码片段来匹配该正则表达式:
$matches = ([regex]::matches($sInput, "---\n(0[1-9]|1[0-2][\/](0[1-9]|[12]\d|3[01])[\/]\d{2}[\s\S]+?)\n-") | %{$_.value});
0[1-9]
的意义吗?它唯一的作用就是匹配一个行前有连字符行,包含数字01
到09
,直接跟着另一个连字符行的行。 - SamWhan