2016-07-29 14 views
8

Trong một trường hợp thử nghiệm của tôi, tôi muốn sao chép một lọ cụ thể của một thành phần từ một vị trí này sang một vị trí khác. ví dụ như khi thư mục đích có lọ chỉ sauJava Regex để tìm tập tin cụ thể

org.test.custom.search-4.2.2-SNAPSHOT-.jar
org.test.custom.search-4.2.2- kiểm tra -SNAPSHOT.jar

Tôi muốn sao chép org.test.custom.search-4.2.2-SNAPSHOT-.jar. Trường hợp phiên bản của lọ này có thể được thay đổi bất cứ lúc nào. Vì vậy, tôi có thể sử dụng regex cho mục đích đó như đã đề cập ở đây [1]. Nhưng tôi muốn biết cách bỏ qua cái lọ khác trong regex. tôi muốn bỏ qua cái lọ có chuỗi "tests" trong tên của nó.

1. Regex for files in a directory

+0

Bạn có thể sử dụng một cái gì đó để lọc các file với một dòng? – ifly6

Trả lời

1

Bạn có thể sử dụng indexOf thay vì regex để kiểm tra xem tên tập tin có chứa từ "kiểm tra" như thế này:

if(fileName.indexOf("tests") >= 0) { 
    // do what you want 
} 

Cập nhật:indexOf() sẽ được nhanh hơn nhiều so với a regex và có lẽ cũng dễ hiểu hơn.

+0

Điều này sẽ lọc cả hai tệp vào lúc này. Sửa đổi thành "-tests-" sẽ giải quyết vấn đề – izi

+0

Thưa bạn nếu bạn thấy đó là 'kiểm tra' không phải 'kiểm tra'. Dù sao cách tôi thể hiện là OK. –

+0

Câu trả lời của bạn ở đâu là câu trả lời chính xác? – xenteros

1

Các regex giải pháp dựa trên sẽ là:

if (fileName.matches(".*tests.*")) { 
    //do something 
} else { 
    //do something else 
} 
-1

Một regex để phù hợp với jar chính nhưng không phải là jar thử nghiệm có thể là:

\w+-[\d.]+-(?!tests-).*\.jar 

Nó có một khớp tiêu cực cho chuỗi các bài kiểm tra " - ". Lưu ý rằng bạn sẽ phải thoát khỏi các dấu gạch chéo ngược khi bạn đặt regex này vào một chuỗi.

0

Phù hợp với SNAPSHOT chính xác với bất kỳ số phiên bản nhất định, bỏ qua tất cả những người khác (bao gồm cả kiểm tra-SNAPSHOT):

org\.test\.custom\.search-\d+\.\d+\.\d+-SNAPSHOT-\.jar 
Các vấn đề liên quan