首页 > 解决方案 > 出现在已知字符串和第一个右括号之间的字符串的正则表达式

问题描述

我正在尝试正则表达式出现在一对标记之间的一些字符串。似乎无法弄清楚,甚至找不到有关它的相关文章。

任何帮助将不胜感激,即使只是指向我所缺少的正确方向/概念的链接。

谢谢

"$pwdLastSet" 应该是从 "(pwdLastSet=" 之后开始并在第一个右括号之前结束的字符串

和 "$status" 的想法相同,但应该在 "(status=" 之后开始并在第一个右括号之前结束

例如。

$pwdLastSet = '2011-10-17 23:06'

$status     = 'Enabled'

非工作代码

# from impacket secretsdump.py outputfile
$testString = 'domain.name\user01:xxxx:yyyyyyyyyyyyyyyy:zzzzzzzzzzzzzzzzzzz::: (pwdLastSet=2011-10-17 23:06) (status=Enabled)'
Write-Host $testString

# https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex
$pwdLastSet = (([regex]::Match( $testString , '(pwdLastSet=)(.*)(\)){1}')).Groups | Where-Object -FilterScript {$PSItem.Name -eq 2}).Value
$status     = (([regex]::Match( $testString , '(status=)(.*)(\)){1}')).Groups | Where-Object -FilterScript {$PSItem.Name -eq 2}).Value


Write-Host
Write-Host "pwdLastSet: $pwdLastSet"
Write-Host "status:     $status"
Write-Host

结果

pwdLastSet: 2011-10-17 23:06) (status=Enabled
status:     Enabled

标签: regex

解决方案


*在in 中添加一个问号以(pwdLastSet=)(.*)(\)){1}使其不贪婪,这意味着它将在找到的第一个右括号处停止,而不是最后一个。所以现在你有(pwdLastSet=)(.*?)(\)){1}


推荐阅读