Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex powershell-仅替换上一个匹配项_Regex_Powershell_Replace - Fatal编程技术网

Regex powershell-仅替换上一个匹配项

Regex powershell-仅替换上一个匹配项,regex,powershell,replace,Regex,Powershell,Replace,我需要帮助处理这个正则表达式。我得到一条如下的线。我想要像这样的东西 服务器名称:AdminServer正在运行 服务器名称:服务服务器1正在运行 $rv="xxx ServerName: AdminServer RUNNING xxxx ServerName: ServicesServer1 RUNNING xxx" $rv -replace ".*(ServerName: [A-Za-z0-9]*.*[RUNNING|SHUTDOWN])",'$1' ServerName: Servi

我需要帮助处理这个正则表达式。我得到一条如下的线。我想要像这样的东西

服务器名称:AdminServer正在运行
服务器名称:服务服务器1正在运行

$rv="xxx ServerName: AdminServer  RUNNING  xxxx ServerName: ServicesServer1  RUNNING xxx"
$rv -replace ".*(ServerName: [A-Za-z0-9]*.*[RUNNING|SHUTDOWN])",'$1'
ServerName: ServicesServer1  RUNNING xxx
凭我现在的实力,我只赢了最后一场比赛

编辑:

$rv="xxx ServerName: AdminServer  RUNNING  xxxx ServerName: ServicesServer1  RUNNING 
$rv -replace ".*(ServerName: [A-Za-z0-9]*.*RUNNING|SHUTDOWN)",'$1'
给予

不是

编辑2: 结果我把这个简化了。字符串看起来更像这样:

$rv='XXX rtification Authority - G3,OU=(c) 2008 GeoTrust Inc. - For authorized use only,O=GeoTrust Inc.,C=US". The loading of the trusted certificate list raised a certificate parsing exception PKIX: Unsupported OID in the AlgorithmIdentifier object: 1.2.840.113549.1.1.11.>
Successfully Connected to Node Manager.
ServerName: SasTTpcAdminServer

RUNNING

Successfully disconnected from Node Manager.
Connecting to Node Manager ...
Successfully Connected to Node Manager.
ServerName: XXXServicesServer1

RUNNING

Successfully disconnected from Node Manager.'

虽然这不一定是一种理想的方法,但在解决一些问题后,它将“起作用”:

  • [RUNNING | SHUTDOWN]
    是一个字符计算器,而不是一个操作。将其切换到
    (?:运行|关机)

  • *
    s匹配太过贪婪。改用
    *?

  • 最终:

    $rv -replace ".*?(ServerName: [A-Za-z0-9]*.*?(?:RUNNING|SHUTDOWN))", '$1'
    
    注意,它与最后一位不匹配。。但是,可能有更好的解决方案(注意,这使用了前面讨论的修复和我自己的一些调整):

    然后,我们可以将捕获组值映射为更简单的值:

    $r | % { $_.Value }
    # -> 
    # ServerName: AdminServer  RUNNING
    # ServerName: ServicesServer1  RUNNING
    

    虽然这不一定是一种理想的方法,但在解决一些问题后,它将“起作用”:

  • [RUNNING | SHUTDOWN]
    是一个字符计算器,而不是一个操作。将其切换到
    (?:运行|关机)

  • *
    s匹配太过贪婪。改用
    *?

  • 最终:

    $rv -replace ".*?(ServerName: [A-Za-z0-9]*.*?(?:RUNNING|SHUTDOWN))", '$1'
    
    注意,它与最后一位不匹配。。但是,可能有更好的解决方案(注意,这使用了前面讨论的修复和我自己的一些调整):

    然后,我们可以将捕获组值映射为更简单的值:

    $r | % { $_.Value }
    # -> 
    # ServerName: AdminServer  RUNNING
    # ServerName: ServicesServer1  RUNNING
    
    试试这个:

     [regex]::Matches($rv, "(ServerName: [A-Za-z0-9]*.*?(?:RUNNING|SHUTDOWN))") | select -expa value
    

    试试这个:

     [regex]::Matches($rv, "(ServerName: [A-Za-z0-9]*.*?(?:RUNNING|SHUTDOWN))") | select -expa value
    

    试试这个:

    $rv -replace '[\s\S]*?(ServerName: \w+)[\s\S]*?((RUNNING|STOPPED).*\n)[\s\S]*?(?(?=ServerName)[\s\S]*?|.*$)', '$1 $2'
    
    对我来说很好。:)

    试试这个:

    $rv -replace '[\s\S]*?(ServerName: \w+)[\s\S]*?((RUNNING|STOPPED).*\n)[\s\S]*?(?(?=ServerName)[\s\S]*?|.*$)', '$1 $2'
    

    对我来说很好。:)

    正确的[]是错误的-但它仍然是不正确的
    $rv-替换“*(服务器名:[A-Za-z0-9]*.[RUNNING | SHUTDOWN])”,“$1”
    运行xxx正确的[]是错误的-但它仍然是不正确的
    $rv-替换“*(服务器名:[A-Za-z0-9].*.[RUNNING | SHUTDOWN]),“$1”
    运行xxx太棒了!我不知道我会那么复杂。你能给我指一下[regex]:matches的解释吗?它只是;也请参阅“新”输入,考虑诸如<代码> ^(ServNord:**)$ < /代码>,并使用我给你答案,即使@克里斯蒂安想出了一个线性衬里后,这是伟大的!我不知道我会那么复杂。你能给我指一下[regex]:matches的解释吗?它只是;也请参阅“新”输入,考虑像<代码> ^(ServNord:**)$ < /代码>,并使用我给你答案,即使@基督教后来出现了一个线性。