簡體   English   中英

Java中文件擴展名的正則表達式

[英]Regular expression for file extensions in Java

我正在嘗試編寫一個簡單的正則表達式來識別列表中以“.req.copied”擴展名結尾的所有文件名。 我正在使用的代碼如下

public class Regextest {
 public static void main(String[] args) {
    // TODO Auto-generated method stub
 String test1=new String("abcd.req.copied");
  if(test1.matches("(req.copied)?")) {
     System.out.println("Matches");
    }
  else
     System.out.println("Does not Match");
    }

 }

正則表達式在在線正則表達式測試器中測試正常,但在程序中不起作用。 我嘗試了多種組合(例如拆分 req 並復制到兩個正則表達式中,或點字符的文字匹配),但沒有任何效果(即使是最簡單的 (reg)? 正則表達式也返回“不匹配”輸出)。 請讓我知道如何解決這個問題。

這里matches的主要問題是它需要從正則表達式匹配整個字符串。 但是在您的情況下,您的正則表達式僅描述了其中的一部分

如果您真的想在這里使用matches項,您的代碼可能看起來更像

test1.matches(".*\\.req\\.copied")
  • . 表示任何字符(除了像\r這樣的行分隔符),所以如果你希望它只表示點,你需要像\. (在字符串中,我們需要將其寫為"\\."因為\在那里也有特殊含義 - 比如創建特殊字符\r \n \t等等 - 所以它還需要通過額外的\進行轉義)。
  • .*將讓正則表達式接受.req.copied之前的任何字符

但在你的情況下,你應該簡單地使用endsWith方法

test1.endsWith(".req.copied")

正如 resueman 在評論中所說,您不需要正則表達式。 您可以簡單地檢查每個文件名endsWith(".req.copied")

if(test1.endsWith(".req.copied")){
    System.out.println("Matches");
}else{
    System.out.println("Does not match");
}

對了,上面的 if-else 可以換成System.out.println(test1.endsWith(".req.copied") ? "Matches" : "Does not match"); .

test1.matches(".*\\.req\\.copied")應該這樣做,但在您的情況下,您應該考慮使用endsWith()而不是matches

你應該想出一個匹配整個字符串格式的正則表達式,而不是一個片段:

String test1= "abcd.req.copied";

if(test1.matches("^.*req\\.copied$")) {
    System.out.println("Matches");
} else {
    System.out.println("Does not Match");
}

另外,您的格式使用的是(req.copied)? ,這將匹配任何情況。 另外, . 符號匹配任何字符,因此將其轉義以匹配點。

暫無
暫無

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

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