当前位置: 首页 > 知识库问答 >
问题:

使用RegEx匹配部分字符串内容?

姬振
2023-03-14

我在创建正则表达式以匹配这些内置组时需要一些帮助:

Domain Admins
Enterprise Admins
Exchange All Hosted Organizations
Exchange Domain Servers
Exchange Enterprise Servers
Exchange Install Domain Servers
Exchange Organization Administrators
Exchange Public Folder Administrators
Exchange Recipient Administrators
Exchange Servers
Exchange Trusted Subsystem
Exchange View-Only Administrators
Exchange Windows Permissions
Recipient Management
Organization Management

我尝试了以下匹配模式,但它给了我一些错误:

$groups_to_ignore = ('Enterprise', 'Admins', 'Organization', 'Exchange')
$reExcludeObjects = '^(\s[a-z-]+){1,3}$' -f (($groups_to_ignore | ForEach-Object { [regex]::Escape($_) }) -join '|')
$reExcludeObjects

错误代码:

Error formatting a string: Index (zero based) must be greater than or equal to zero and less than the size of the argument list..
At line:2 char:1
+ $reExcludeObjects = '^(\s[a-z-]+){1,3}$' -f (($groups_to_ignore | For ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (^(\s[a-z-]+){1,3}$:String) [], RuntimeException
    + FullyQualifiedErrorId : FormatError

这是预览:https://regex101.com/r/WKal3Y/1

共有2个答案

聂鹏云
2023-03-14

您需要像这样构建模式:

$reExcludeObjects = '^(?:{0})(\s[a-z-]+){{1,3}}$' -f (($groups_to_ignore | ForEach-Object { [regex]::Escape($_) }) -join '|')

这将导致

PS> $reExcludeObjects
^(?:Enterprise|Admins|Organization|Exchange)(\s[a-z-]+){1,3}$

因此,重点是对< code>-f字符串使用< code>{0}占位符,对文字大括号使用双大括号。

杜凯
2023-03-14

为什么不使用Select-String对您的模式稍加修改呢?

'Domain Admins
Enterprise Admins
Exchange All Hosted Organizations
Exchange Domain Servers
Exchange Enterprise Servers
Exchange Install Domain Servers
Exchange Organization Administrators
Exchange Public Folder Administrators
Exchange Recipient Administrators
Exchange Servers
Exchange Trusted Subsystem
Exchange View-Only Administrators
Exchange Windows Permissions
Recipient Management
Organization Management
' | Out-File -FilePath 'D:\Temp\BuiltInGroups.txt'

Clear-Host
Get-Content -Path 'D:\Temp\BuiltInGroups.txt' | 
ForEach-Object {$PSItem | Select-String -Pattern '^((?!Enterprise|Organization|Exchange).)*$'}
# Results
<#
Domain Admins
Recipient Management
#>
 类似资料:
  • 我对正则表达式是新手。 以下是我到目前为止在C#中所做的工作 显然,这并不违反所有指定的规则。有人能给点提示吗?

  • 问题内容: 我正在寻找使用ScanFilter搜索一组蓝牙设备。我知道所有这些设备的地址都以00:A0:50开头,然后最后6位数字有所不同,因此所有地址看起来都像00:A0:50:XX:XX:XX。我正在寻找一种使用setDeviceAddress来查找地址以那6位数字开头的设备的方法。这将字符串作为输入。相关代码如下。 我想我需要为此使用诸如正则表达式之类的东西,但是我对Java,Android

  • 我希望使用扫描过滤器来搜索一组蓝牙设备。我知道所有这些设备的地址都以00:A0:50开头,然后最后6位数字有所不同,因此所有地址看起来都像00:A0:50:XX:XX:XX。我正在寻找一种方法来使用setDeviceAddress来查找地址以这6位数字开头的设备。这将字符串作为输入。相关代码如下。 我想我需要为此使用类似正则表达式的东西,但是我对Java、Android和regex相当陌生,我不确

  • 我尝试了这种模式,但发现第一个匹配的句子带有符号

  • 我需要一个正则表达式(将在ZF2路由中使用,我相信它使用php的preg_match),匹配除特定字符串之外的任何内容。 比如:我需要搭配除了“红”、“绿”、“蓝”之外的任何东西。 我目前有正则表达式: 在最后一种情况下,正则表达式的行为不像我希望的那样。它应该与“redtest”匹配,因为“redtest”不是(“红色”、“绿色”或“蓝色”)。 有关于如何修复正则表达式的想法吗?

  • 想改进这个问题吗 通过编辑此帖子,添加详细信息并澄清问题。 https:www.google。com/;ParamName=项目;AccessKey=PDJKJDSJJKNEIOWEMCL/dsjdkhfjf=;值=xyz 在这里,我想用一些虚拟字符串替换值并返回整个字符串。 预期输出:<代码>https:www.google。com/;ParamName=项目;AccessKey=dummyVa