2016-08-18 120 views
0

我有以下問題。我想搜索文件夾和文件的路徑,如果路徑(文件或目錄)的最後一部分包含我的搜索字符串,我的正則表達式應該只匹配。正則表達式字符串的末尾匹配

例如:

我想搜索 '喂' 以下路徑的:

  1. d:\用戶\我\文檔\的FindFile \你好\

  2. D:\ Users \ me \ Documents \ FindFile \ hallo \ bla \

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

  4. d:\用戶\我\文檔\的FindFile \你好\中\

  5. d:\用戶\我\文檔\的FindFile \你好\中\喂NR 2 \

  6. d: \用戶\我\文檔\的FindFile \你好\中\喂NR 2 \以及hallo.txt

  7. d:\用戶\我\文檔\的FindFile \測試\ DRIN \ DAS喂\

  8. d: \ Users \ me \ Documents \ FindFile \ test \ drin \ hallo test \

  9. d:\用戶\我\文檔\的FindFile \測試\ TXT DRIN \ test_hallo.txt

現在路號碼2,3和4應該不會是因爲他們不匹配最後是一個'hallo'。

我目前正在與此正則表達式嘗試這種(例如2「喇嘛」,而不是與「BLA喂」什麼的,在它「喂」結尾):.*hallo(\\|.+),但它不工作。

你可以查看我在這裏做了什麼。第2行,3和4高亮顯示,並應不: https://regex101.com/r/eF3cU8/1

+0

修剪右側的反斜槓,用反斜槓分割每個字符串並僅測試最後一部分。 –

回答

1

您可以使用:

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

Demo

  • ^停泊在該行的開始(我們使用的是m國旗)
  • .*任意數量的任何字符出現
  • hallo字面文字hallo
  • (?=\\$|[^\\]+)一個正向前查找以確認或者下一個字符是一個斜線隨後行的末尾,或者沒有更多的斜線上線
  • .*任意數量的出現任何字符
  • $行結束
+0

謝謝!這解決了我的問題:) – mtzE

1

如果像你說的 - 只匹配,如果路徑的最後一部分包括我的搜索字符串 - 這將意味着示例沒有。 9也不應匹配,這應該這樣做:

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

它匹配hallo(搜索字符串),可選後跟任意字符\。然後接着是\,並且隨後任何字符\

Check it out here at regex101然後再次任選

+0

@凱斯霍爾已經回答了我的問題。我解釋錯了,因爲test_hallo.txt包含'hallo',那就是我在尋找的東西:)但是,無論如何,謝謝你! – mtzE

相關問題