2016-07-29 2 views
8

В одном из моих тестовых примеров я хочу скопировать конкретную банку компонента из одного места в другое. например, если целевой каталог имеет только следующие банкиJava Regex, чтобы найти конкретный файл

org.test.custom.search-4.2.2-SNAPSHOT-.jar
org.test.custom.search-4.2.2- тесты -SNAPSHOT.jar

Я хочу скопировать файл org.test.custom.search-4.2.2-SNAPSHOT-.jar. Где версия этой банки может быть изменена в любое время. Поэтому я могу использовать регулярное выражение для этой цели, как указано здесь [1]. Но я хочу знать, как опустить другую банку в регулярном выражении. i.e хочу опустить банку с строкой «тестов» на свое имя.

1. Regex for files in a directory

+0

Вы могли бы использовать что-то, чтобы фильтровать файлы с потоком? – ifly6

ответ

1

Вы можете использовать indexOf вместо regex, чтобы проверить, если имя файла, содержащего слово "испытания", как это:

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

Update:indexOf() будет гораздо быстрее, чем a regex, и, вероятно, также легче понять.

+0

Это будет фильтровать оба файла в данный момент. Изменение «-tests-» решило бы проблему – izi

+0

Сэр, если вы видите, что это «тесты», а не «тест». Во всяком случае, как я показываю, все в порядке. –

+0

Где в вашем ответе 'regex', о котором идет речь? – xenteros

1

Решение, основанное regex будет:

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

Один регулярное выражение, чтобы соответствовать основной банку, но не тест банка может быть:

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

Это отрицательно Искателя для «испытаний струнных -». Обратите внимание, что вам придется избегать обратных косых черт, когда вы помещаете это регулярное выражение в строку.

0

сопоставляет SNAPSHOT точно с любым данным номером версии, игнорируя все остальные (в том числе тесты-Snapshot):

org\.test\.custom\.search-\d+\.\d+\.\d+-SNAPSHOT-\.jar