Regex 该字符串不是有效的正则表达式

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},后面没有任何内容 我尝试在我的选择字符串

我有一个包含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},后面没有任何内容

我尝试在我的
选择字符串中使用
-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”
就是您所需要的。