【发布时间】:2022-01-20 12:17:30
【问题描述】:
我正在尝试遍历一组警报代码并使用正则表达式在 cpp 代码中查找它。我知道当我硬编码一个值并为我的正则表达式使用双引号时,我的正则表达式有效,但我需要传入一个变量,因为它是一个大约 100 个列表,可以使用单独的定义进行查找。以下是我一般要使用的内容。如何修复它以使其与 $lookupItem 一起使用,而不是在 Get-EpxAlarm 函数中硬编码“OTHER-ERROR”?我在 $fullregex 定义中尝试了 $lookupItem 周围的单引号和双引号,但它什么也不返回。
Function Get-EpxAlarm{
[cmdletbinding()]
Param ( [string]$fileContentsToParse, [string]$lookupItem)
Process
{
$lookupItem = "OTHER_ERROR"
Write-Host "In epx Alarm" -ForegroundColor Cyan
# construct regex
$fullregex = [regex]'$lookupItem', # Start of error message########variable needed
":[\s\Sa-zA-Z]*?=", # match anything, non-greedy
"(?<epxAlarm>[\sa-zA-Z_0-9]*)", # Capture epxAlarm Num
'' -join ''
# run the regex
$Values = $fileContentsToParse | Select-String -Pattern $fullregex -AllMatches
# Convert Name-Value pairs to object properties
$result = $Values.Matches
Write-Host $result
#Write-Host "result:" $result -ForegroundColor Green
return $result
}#process
}#function
#main code
...
Get-EpxAlarm -fileContentsToParse $epxContents -lookupItem $item
...
$fileContentsToParse 在哪里
case OTHER_ERROR:
bstrEpxErrorNum = FATAL_ERROR;
break;
case RI_FAILED:
case FILE_FAILED:
case COMMUNICATION_FAILURE:
bstrEpxErrorNum = RENDERING_ERROR;
break;
因此,如果我查找 OTHER_ERROR,它应该返回 FATAL_ERROR。
我在regex editor 中测试了我的正则表达式,它适用于硬编码值。如何定义我的正则表达式以便我使用参数并返回与硬编码参数值相同的内容?
【问题讨论】:
-
@SantiagoSquarzon 就像我在文章中所说的那样,我尝试了双引号,但它不像硬编码那样工作。它什么也不返回。
-
你说得对,我的错,我使用“OTHER_ERROR”对其进行了测试,它对我有用,但后来“RI_FAILED”不起作用。
-
你可以使用 ArgumentCompleter 来处理非常酷的情况
标签: regex powershell variables