Regex 该字符串不是有效的正则表达式
我有一个包含DNS.zone文件的文件夹 我正在尝试返回IP地址类似于Regex 该字符串不是有效的正则表达式,regex,powershell,Regex,Powershell,我有一个包含DNS.zone文件的文件夹 我正在尝试返回IP地址类似于172.20.*的所有文件和字符串 我使用以下方法: Get-ChildItem -Recurse -Path 'C:\Root' | Select-String -Pattern '*172.20.*' | group | select name 但这也带来了: Select String:字符串*172.20.*不是有效的正则表达式:正在分析“*172.20.*”—量词{x,y},后面没有任何内容 我尝试在我的选择字符串
172.20.*
的所有文件和字符串
我使用以下方法:
Get-ChildItem -Recurse -Path 'C:\Root' | Select-String -Pattern '*172.20.*' | group | select name
但这也带来了:
Select String:字符串*172.20.*不是有效的正则表达式:正在分析“*172.20.*”—量词{x,y},后面没有任何内容
我尝试在我的选择字符串中使用-SimpleMatch
案例,但没有成功。将字符串括在双引号中也不起作用
如果我使用实际文本作为我的模式,它将毫无问题地工作
我的问题在哪里?就像错误消息所说:*172.20.
不是有效的正则表达式。它是一种通配符模式,可以与-like
运算符一起使用,但不能与选择字符串一起使用<代码>*
在正则表达式中是一个不能单独使用的修饰符,它需要应用于某个对象。等价于通配符*
(匹配零个或多个字符)的正则表达式是*
。但是,由于正则表达式(与通配符模式不同)在默认情况下不是锚定的,因此不需要在模式的开头和结尾添加它们,匹配才能工作
将表达式更改为实际的正则表达式:
... | Select-String -Pattern '172\.20\.' | ...
或者修改代码以使用通配符匹配而不是正则表达式匹配:
Get-ChildItem -Recurse -Path 'C:\Root' | Where-Object {
Get-Content $_.FullName | Where-Object { $_ -like '*172.20.*' }
} | Select-Object -Expand Name
使用-SimpleMatch
不适用于您的方法,因为-Pattern'*172.20.*'-SimpleMatch
将查找一个文本(子)字符串*172.20.*
(带星号),该字符串可能不在您的文件中。如果您从模式中删除了通配符,它就会起作用:
... | Select-String -Pattern '172.20.' -SimpleMatch | ...
您无法量化模式的开始<代码>'*'
是无效的正则表达式。感谢您的评论,我需要使用什么解决方法来允许此@WiktorStribiżewi,这完全取决于您要匹配的内容和位置。也许“\b172\.20\b”
就是您所需要的。