0
$lines = '<string>D:\home\bob\utility.mdb</string>'

[String[]]$varr = $lines | Select-String -AllMatches -Pattern "<string>*.mdb" |
Select-Object -ExpandProperty Matches |
Select-Object -ExpandProperty Value

これはnullを返しています。

<string>最終的には、 からまでの行全体が必要です</string>

しかし、どうやらこれをpowershellで表現する方法がわかりません。

4

1 に答える 1

1

あなたの最初の例では:

<string>[\s]*.mdb[\s]*

最初の [\s]* は何にも一致しません。あなたはおそらく意図した:

<string>[\S]*.mdb[\s]*

しかし、その後、プロパティMatchesは文字列全体を最初から最後まで受け入れると思います。つまり、すべてを配置する必要があり、ワイルドカードと呼ぶことができるため、ドットをエスケープする必要があります。

<string>[\S]*\.mdb[\s]*<\/string>

そして、いくつかの不要な部分を削除できると思います (powershell の正規表現にはあまり詳しくありませんが、\S角括弧内のように記述された文字クラスを配置する必要がある場所は見たことがありません)。

<string>\S*\.mdb<\/string>

少し説明:

  • \sはスペース文字に一致し、多くの場合、改行またはタブ (\nおよび\tそれぞれ) にも一致します。

  • \S\s一致しないものすべてに一致します。

于 2013-07-10T15:55:03.997 に答える