Regex Powershell正则表达式混淆
目标字符串:Regex Powershell正则表达式混淆,regex,powershell,powershell-3.0,Regex,Powershell,Powershell 3.0,目标字符串: 8AM - 10AM (local time) 12PM - 1PM (local time) 我可以用这个表达式从中提取时间: \d{1,2}(AM|PM) 但是,我无法在powershell中执行此操作: cls $var = "8AM - 10AM (local time) 12PM - 1PM (local time)" if ($var -match "\d{1,2}(AM|PM)") { $matches } PS输出: Name Value
8AM - 10AM (local time)
12PM - 1PM (local time)
我可以用这个表达式从中提取时间:
\d{1,2}(AM|PM)
但是,我无法在powershell中执行此操作:
cls
$var = "8AM - 10AM (local time)
12PM - 1PM (local time)"
if ($var -match "\d{1,2}(AM|PM)")
{
$matches
}
PS输出:
Name Value
---- -----
1 AM
0 8AM
但是,当我在PS中使用下面的脚本时:
cls
$var = "8AM - 10AM (local time)"
[regex]::Matches($var,"\d{1,2}(AM|PM)").Value
它给出了正确的输出:
8AM
10AM
你知道为什么会这样吗?
运算符最多只查找一个匹配项-match
确实是正确的选择,如果您需要多个匹配项[regex]::Matches()
- 或者,使用
cmdlet,但速度会慢得多:Select-String
('8AM-10AM(当地时间)'Select String-AllMatches'\d{1,2}(AM | PM')。Matches.Value
- 因此,对于
,自动-match
结果变量仅包含关于该1个匹配的信息,可能包括捕获组匹配$Matches
- 正则表达式的
部分是捕获组,因此对于第一个整体匹配-(AM | PM)
,捕获组的结果是8AM
AM
是一个$Matches
,其带有[hashtable]
键的条目包含整体匹配;条目0
包含第n个(未命名)捕获组结果- 由于
项的枚举没有保证顺序,因此在这种情况下,[hashtable]
项恰好列在1
项之前0
- 正则表达式的