0

この正規表現について助けが必要です。以下のような文字列を取得します。私は何かが欲しい

サーバー名: AdminServer 実行中 サーバー名
: ServicesServer1 実行中

$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'

与える

ServerName: ServicesServer1  RUNNING xxx

いいえ

ServerName: AdminServer  RUNNING
ServerName: ServicesServer1  RUNNING

EDIT2:これを単純化しすぎたことがわかりました。文字列は次のようになります。

$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.'
4

3 に答える 3

2

これを試して:

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

また

($rv | select-string -Pattern "(ServerName: [A-Za-z0-9]*.*?(?:RUNNING|SHUTDOWN))" -AllMatches ).matches | select -expa value
于 2013-01-15T10:31:06.487 に答える
1

これは必ずしも理想的なアプローチではありませんが、いくつかの問題を修正すると「うまくいく」でしょう。

  1. [RUNNING|SHUTDOWN]は文字記号であり、改竄ではありません。に切り替えます(?:RUNNING|SHUTDOWN)

  2. sはあまりにも貪欲に.*一致します。代わりに使用してください。.*?

最後の:

$rv -replace ".*?(ServerName: [A-Za-z0-9]*.*?(?:RUNNING|SHUTDOWN))", '$1'

最後のビットと一致しないことに注意してください..ただし、これにはより良い解決策がある可能性があります(これは、以前に説明した修正と私自身のいくつかの調整を使用していることに注意してください):

$r = [regex]::matches($rv,"(ServerName:.*?\w+.*?(?:RUNNING|SHUTDOWN))")
$r[0].Value
# -> ServerName: AdminServer  RUNNING

次に、キャプチャ グループの値をより単純なものにマップできます。

$r | % { $_.Value }
# -> 
# ServerName: AdminServer  RUNNING
# ServerName: ServicesServer1  RUNNING
于 2013-01-15T10:04:40.923 に答える
0

これを試して:

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

私にとってはうまくいきました。:)

于 2013-01-15T11:28:15.387 に答える