2

テキストファイルからすべての一致をファイルに返す単純な正規表現があります。

\\Root_Dir.*?'

" " で始まり\Root_dir、一重引用符で終わります。正常に動作しますが、拡張子のファイルを除外したいという問題があります.rep。私が読んだことに基づいて、私は試しました:

\\Root_Dir.*?(?!\.rep)'

これには、\Root_dir\nextdir\happy.rep.

可能であれば、返されるものの最後の一重引用符も除外したいと思います

私は、ルックアロンズをサポートしていると思われる PowerShell 2.0 を使用しています。

4

2 に答える 2

1

ネガティブルックビハインドを使用する必要があります。つまり、一重引用符のビハインドを使用する必要があります。.rep

\\Root_dir[^']*(?<!\.rep)(?=')
于 2013-01-16T17:32:22.790 に答える
0
\\Root_Dir.*?(?!\.rep)'

Consider what the later part of this (after the .*?) is asking for, at the same position in the string:

  • Match single quote
  • So not match \.rep

clearly this will be true in the example because the .*? with match .rep and thus the negative look ahead is satisfied.

As .NET supports variable width look-arounds1, you need to perform the variable width part within the look ahead before separately performing it for the quote:

\\Root_Dir(?!.*?\.rep).*?'

However I would be tempted to break this up into:

  1. Starts with the prefix: $value.StartsWith("\\Root_Dir")
  2. If #1 is true then use a regex with a negative loook behind: (?<!\.rep)'$ (ie. a quote not preceeded by …).

1 No-one told the PM/dev others had concluded it was too hard.

于 2013-01-16T17:38:27.390 に答える