2016-08-18 29 views
0

次の問題があります。私はフォルダとファイルのパスを検索したいと思います。パス(ファイルまたはディレクトリ)の最後の部分に自分の検索文字列が含まれている場合にのみ正規表現を一致させる必要があります。例えば文字列の末尾が一致する正規表現パターン

、私は次のパスの中に 'ハロー' を検索したい:

  1. D:\ユーザーはドキュメント\ファイル探索\ \ハロー

  2. \私\

    D:¥Users¥me¥Documents¥FindFile¥hallo¥bla¥

  3. D:¥Users¥me¥Documents¥FindFile¥hallo¥bla¥bla 2¥

  4. D:\ユーザーは、私に\ドキュメント\ \ファイル探索\ハロー\ \

  5. D内部:\ユーザーはドキュメント\私\ \ファイル探索\ハロー\ \ハローNR2 \

  6. D内部: \ユーザーはドキュメント\ファイル探索\テスト\ DRIN \ DAS \私\ \ハロー

  7. D:\ユーザーは\ドキュメント\ファイル探索\ハロー\ \ハローNR2 \良くhallo.txt

  8. D内部の私を\します\ Users \ me \ Documents \ FindFile \ test \ drin \ halloテスト\

  9. D:\ユーザーは、私に\ドキュメント\ \ファイル探索\テスト\ txtのDRIN \ test_hallo.txt

そうではないので、今のパス番号2、3、4が一致しないでください

その中に「恋人」と終わります。 (例えば、2は 'bla'で終わり、 'bla hallo'やそれに 'hallo'はありません)

私は現在、この正規表現でこれを試しています:.*hallo(\\|.+)

ここで行ったことを確認できます。行2、3と4が強調表示されないようになります。 あなたが使用することができますhttps://regex101.com/r/eF3cU8/1

+0

右のバックスラッシュをトリムし、各文字列をバックスラッシュで分割し、最後の部分のみをテストします。 –

答えて

1

:行の先頭に

^.*hallo(?=\\$|[^\\]+).*$ 

Demo

  • ^アンカー(我々は使用していますmフラグ)
  • .*任意の文字の出現回数
  • halloリテラルテキストhallo
  • (?=\\$|[^\\]+)いずれかの次の文字が行末に続くスラッシュである、またはライン
  • .*にはより多くのスラッシュが出現の任意の数が存在しないことを確認する肯定先読み任意の文字
  • $ライン
+0

ありがとうございます!それは私の問題を解決しました:) – mtzE

1

の終わり、あなたが言うようにした場合 - パスの最後の部分が含まれている場合はONLY一致私の検索文字列 - これはその例のnoを意味します。 9のいずれかに一致すべきではない、これはそれを行う必要があります。

hallo[^\\]*\\[^\\]*$ 

をこれは、任意の文字しかし\続いhallo(検索文字列)、任意でと一致します。その後、任意の文字しかし\

Check it out here at regex101

続いて任意に\続いて、再度

+0

@Keith Hallはすでに私の質問に答えました。 test_hallo.txtには「hallo」とそれが含まれているので、私は間違って説明しました:)しかし、とにかくありがとう! – mtzE

関連する問題