2015-04-16 133 views
0

我一直在使用正則表達式來處理一段時間,而且我似乎無法正確理解它。Java正則表達式排除文件路徑中的點

我有一個文本文件,其中包含一些文件信息以及路徑。我想搜索的文字是這樣的:

Windows\System32\user32.dll 

該文件的內容是這樣的:

Windows\System32\user32.dll 
WINDOW~1.000\Windows\System32\user32.dll 
Windows.old.000\Windows\System32\user32.dll 

我一直在使用該模式只是\\Windows\\System32\\user32.dll但現在匹配所有的條目。

我需要做的是排除文件路徑第一部分中包含.~字符的任何字符,忽略實際文件名中的.

我一直在嘗試像[^.~]這樣的東西,但我可能完全錯了。

任何意見或建議將不勝感激。

感謝

+2

不要使用正則表達式,每行使用'contains'和其他String方法。 – Maroun

+0

我同意@MarounMaroun。不要使用包含()(或任何其他字符串方法)的正則表達式可以完成這項工作 – TheLostMind

+0

通常我會使用contains,但問題是文件中的所有行都包含我正在查找的實際字符串。我需要排除不正確啓動的那些。我會玩一下,謝謝。 – Tony

回答

1

,如果你想完全匹配Windows\System32\user32.dll,你的java正則表達式是:^Windows\\\\System32\\\\user32[.]dll$

需要注意的是,你必須在Java正則表達式兩次轉義反斜線,一次是爲正則表達式,一旦串。

E.g.

  • \\w在Java中的正則表達式是\w(字字符)
  • \\\\w在Java中的正則表達式是\w(斜線和W)`

點在正則表達式的特殊含義也更好逃生( \\.)或把它放在字符類:[.]

然後,來到您的要求:

我需要做的是排除任何包含a。或者〜字符在文件路徑的第一部分

你可以這樣做:

^[^.~\\\\]+\\\\.+ 

它相匹配的字符串:

  • 第一部分(第一個反斜槓之前)不包含. or ~
  • 之後第一個\它可能是任何東西。
+0

或使用'lookingAt'或'matches'方法。 –

+0

感謝您完成這項工作的信息。 – Tony