簡體   English   中英

用於匹配具有非法文件名字符的字符串的正則表達式

[英]regex for matching strings that have illegal filename characters

我一直想弄清楚這個爆破正則表達怎么樣兩個小時! 現在是午夜,我得知道這個,然后去睡覺!

String str = new String("filename\\");
if(str.matches(".*[?/<>|*:\"{\\}].*")) {
    System.out.println("match");
}else {
    System.out.println("no match");
}

".*[?/<>|*:\\"{\\\\}].*"是我的正則表達式。除了反斜杠之外,它正確捕獲所有內容!!!我需要知道如何正確捕獲反斜杠請幫助!

僅供參考,我想抓到的非法角色是? \\ / <> | *:“我的反斜杠工作異常了

問題是\\\\轉義了Java String中的反斜杠,你必須在正則表達式中轉義它。 這意味着使用四個反斜杠:

if ("ab\\d".matches("[abd\\\\]*") {
  // match
}

因為兩個反斜杠是Java String轉義,所以正則表達式是:

[abc\\]*

正則表達式中需要和\\\\來逃避反斜杠。

我知道這是一個相當古老的問題,但我在處理同樣的問題時發現它並且我認為未來的讀者可能會覺得這很有用:

除了在文件名中捕獲無效字符外,還有一些其他因素需要考慮。 文件名不能以空格開頭或結尾,它們不能以a結尾. 字符,它們不能是空字符串。 對於匹配錯誤的文件名,這個正則表達式可能會更加徹底:

^(\s+.*|.*[\\/:\"?*|<>].*|.*\s+||.*\.)$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM