我试图从文本文件中取出日期.这是内容:
Storage Manager
Command Line Administrative Interface – Version 7,Release 1,Level 1.4
(c) Copyright by Corporation and other(s) 1990,2015. All Rights Reserved.Session established with server TSERVER: Windows
Server Version 7,Level 5.200
Server date/time: 11/22/2016 15:30:00 Last access: 11/22/2016 15:25:00ANS8000I Server command.
我需要在服务器日期/时间之后提取日期/时间.我写了这个正则表达式:
/([0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4} [0-9]{1,2}:[0-9]{1,2})/
这在regex101中完美运行.请参阅https://regex101.com/r/MB7yB4/1上的示例
然而,在Powershell中,它的反应不同.
$var -match "([0-9]{1,2})"
给
Server date/time: 11/22/2016 16:30:00 Last access: 11/22/2016
15:37:19
和
$var -match "([0-9]{1,2})"
什么都没有.
我不确定为什么比赛不一样.
谢谢你的帮助!
解决方法
-match运算符返回一个布尔值,显示是否找到匹配项.此外,它还使用匹配数据(整个匹配和捕获组值)设置$matches变量.你只需要访问整场比赛:
if($var -match '[0-9]{1,2}/[0-9]{1,2}/[0-9]{4} [0-9]{1,2}') { $matches[0] }
见Using -match
and the $matches
variable in PowerShell.
请注意,在Powershell regexp中不需要转义/ synmbol,因为这个字符并不特殊,并且在Powershell中定义正则表达式时不使用正则表达式分隔符(那些在JS,PHP regexp中的外部/…/).