[英]Regex brings all lines. I want to make PS script to find all password pattern in File server
我正在尝试制作用于搜索所有文档和 txt 文件以查找密码模式的 powershell 脚本。 实际上我的代码工作正常。 我的正则表达式是捕获密码,但它带来了所有行。
正则表达式模式
""" . (?=.{8,20})(?=. [az])(?=. [AZ])(?=. [0-9])(?=. [!^#+$ %&{()=}? -|¨@.,:;,]).* """
我的正则表达式带来了所有 Line。 如何解决此错误。
PS 代码
$Path = "c:\users\XXXXXXX"
$output_file = ‘C:\Users\XXXXXXXX\Desktop\Result.txt’
$ALLWORDS =Get-ChildItem $Path -Recurse -ErrorAction SilentlyContinue
foreach ($WORDS in $ALLWORDS) { #
$Word = New-Object -ComObject Word.Application
$Word.Visible = $false
$regex = ‘\b.*(?=.{8,20})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!^#+$%&{()=}?*\-|¨@.,:;,]).*\b’
$Doc = $Word.Documents.Open($WORDS.FullName, $false, $true)
$paras = $doc.Paragraphs
echo $paras.count
foreach($para in $paras){
if( $para.range.text -match $regex) {
$1=$matches.Values,$Words.Name | Out-File $output_file -Append
Write-Host $matches.Values, $words.Name
}
}
$Doc.Close()
$Word.Quit()
$Word = $null
}
您可以使用
(?<!\S)(?=[^a-z\s]*[a-z])(?=[^A-Z\s]*[A-Z])(?=[^0-9\s]*[0-9])(?=\S*[!^#+$%&{()=}?*|¨@.,:;,-])\S{8,20}(?!\S)
请参阅正则表达式演示。 请注意,您需要在 PowerShell 中使用-cmatch
运算符而不是-match
,否则它将不区分大小写。
详情:
(?<!\S)
- 左边不允许有空格(?=[^az\s]*[az])
- 在除空格和小写 ASCII 字母之外的任何零个或多个字符之后,必须有一个小写 ASCII 字母(?=[^AZ\s]*[AZ])
- 在除空格和大写 ASCII 字母之外的任何零个或多个字符之后,必须有一个大写 ASCII 字母(?=[^0-9\s]*[0-9])
- 在除空格和 ASCII 数字之外的任何零个或多个字符之后,必须有一个 ASCII 数字(?=\S*[!^#+$%&{()=}?*|¨@.,:;,-])
- 在任何零个或多个非空格之后,必须有一个来自[!^#+$%&{()=}?*|¨@.,:;,-]
设置(将\S*
替换为[^\s!^#+$%&{()=}?*|¨@.,:;,-]*
为了获得更好的性能,我只是想让这里的模式更短)\S{8,20}
- 八到二十个非空白字符(?!\S)
- 右侧空白边界。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.