[英]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.