正则表达式从一长串混乱中获取密码

时间:2013-08-19 06:34:22

标签: regex powershell

我正在使用power-shell并从我的程序获得以下输出。

我在从其他东西的混乱中获取密码时遇到问题。理想情况下,我需要自己获得 Hiva !! 66 。我使用reg-ex来完成这个,它只是不起作用。密码将始终为8个字符,具有大写和小写以及特殊字符。我已经创建了分裂以及我需要的其他所有内容但是注册部分正在弄乱我。

我离开了很多关于reg-ex和密码的问题,但那些之前和之后似乎没有太多混乱。任何帮助都将不胜感激。 到目前为止,我最好的尝试是:

"(?=.*\d)(?=.*[A-Z])(?=.*[!@#\$%\^&\*\~()_\+\-={}\[\]\\:;`"'<>,./]).{8}$"

C:\Users\<username>\AppData\Roaming\Crystal Point\OutsideView\Macro\CONNECTEXP.VCB:5:For intTmp = 1 To 4
C:\Users\<username>\AppData\Roaming\Crystal Point\OutsideView\Macro\CONNECTEXP.VCB:8:cboCOMPort.SelectString 1, "1"
C:\Users\<username>\AppData\Roaming\Crystal Point\OutsideView\Macro\CONNECTEXP.VCB:11:str2CRLF = Chr(13) & Chr(10) & Chr(13) & Chr(10)
C:\Users\<username>\AppData\Roaming\Crystal Point\OutsideView\Macro\CONNECTEXP.VCB:14:    & "include emulation type (currently Tandem), the I/O method (currently Async) and host connection information 
for the session (currently COM9, 8N1)" _
C:\Users\<username>\AppData\Roaming\Crystal Point\OutsideView\Macro\CONNECTEXP.VCB:15:    & " to the correct values for your target host (e.g., TCP/IP and host IP name or address) and save the 
IOSet "CHARSIZE", "8"
PASS="Hiva!!66" If DDEAppReturnCode() <> 0 Then
If DDEAppReturnCode() <> 0 Then
C:\Users\<username>\AppData\Roaming\Crystal Point\OutsideView\Macro\DDEtoXL.vcb:28:    MsgBox "Could not load " & txtWorkSheet.text, 48
C:\Users\<username>\AppData\Roaming\Crystal Point\OutsideView\Macro\DDEtoXL.vcb:37:DDESheetChan = -1
C:\Users\<username>\AppData\Roaming\Crystal Point\OutsideView\Macro\DDEtoXL.vcb:38:DDESystemChan = -2

4 个答案:

答案 0 :(得分:0)

您是否尝试过以下正则表达式:

^PASS="(.{8})"

答案 1 :(得分:0)

请使用此

(?<=PASS=").+(?=")

答案 2 :(得分:0)

您可以使用以下内容从该输出中提取密码:

... | ? { $_ -cmatch 'PASS="(.{8})"' | % { $matches[1] }

或类似(在PowerShell v3中):

... | Select-String -Case 'PASS="(.{8})"' | % { $_.Matches.Groups[1].Value }

在PowerShell v2中,如果要使用Select-String,则必须执行以下操作:

... | Select-String -Case 'PASS="(.{8})"' | select -Expand Matches |
   select -Expand Groups | select -Last 1 | % { $_.Value }

答案 3 :(得分:0)

如果您不能指望引号或PASS=在那里,您将不得不依靠密码的组合来完成所有事情。以下正则表达式匹配允许类型的八个连续字符的字符串,前瞻和后观以确保不超过八个。

$regex = [regex] @'
(?x)
(?<![!@#$%^&*~()_+\-={}\[\]\\:;`<>,./A-Za-z0-9])
(?:
  [!@#$%^&*~()_+\-={}\[\]\\:;`<>,./]()
  |
  [A-Z]()
  |
  [a-z]()
  |
  [0-9]()
){8}
\1\2\3\4
(?![!@#$%^&*~()_+\-={}\[\]\\:;`<>,./A-Za-z0-9])
'@

它还验证每种字符类型中至少有一种:大写字母,小写字母,数字和特殊字符。正则表达式中使用的前瞻方法不起作用,因为它可以提前看起来,超出了你想要匹配的单词的结尾。相反,我在每个分支中放置一个空组,就像复选框一样。如果对其中一个组的反向引用失败,则意味着分支没有参与匹配,这意味着相关的字符类型不存在。