2014-01-29 5 views
3

Мне нужно проверить входной файл, чтобы убедиться, что он имеет правильное управление версиями. Это, например, входной файл: W:\\folder\\test_v2301_01_29_2014_1420.pfdИспользуйте Java regex, чтобы найти совпадающую строку в середине строки

Я создал регулярное выражение на Java, чтобы найти строку версии, которую я ищу, для проверки файла.

RegEx:v[0-9]{4}_[0-9]{2}_[0-9]{2}_[0-9]{4}_[0-9]{4} Однако это не удается, потому что регулярное выражение смотрит на начало файла.

Вызывается:if (!arcvalFileFormBean.getTxtFileReview().matches("v[0-9]{4}_[0-9]{2}_[0-9]{2}_[0-9]{4}_[0-9]{4}"))

Что является лучшим способом для поиска строки, не зная, как далеко от начала это будет?

ответ

2

Попробуйте это:

if (!arcvalFileFormBean.getTxtFileReview().matches(
       ".*?v[0-9]{4}_[0-9]{2}_[0-9]{2}_[0-9]{4}_[0-9]{4}.*")) 

String#matches попытки соответствовать полному вводу поэтому .*? перед вашими версией регулярных выражений и .* после этого будет убедиться, что эта картина соответствует где-нибудь на входе.

+0

работал как шарм. Спасибо! Я буду отмечать как ответ через 9 минут, когда смогу. – staples89

+0

Добро пожаловать, рад, что это сработало. – anubhava

0

Вместо добавления аргументов ведущего и завершающего совпадений в RegEx вы также могли бы скомпилировать шаблон сначала, создать экземпляр сопряжения и затем вызвать find() в возвращаемом совпадении.

Pattern pattern = Pattern.compile("v[0-9]{4}_[0-9]{2}_[0-9]{2}_[0-9]{4}_[0-9]{4}"); 
Matcher matcher = pattern.matcher(arcvalFileFormBean.getTxtFileReview()); 

if (!matcher.find()) { 
    ... 
} 

Сличитель также обеспечивает matches() операцию, хотя это ведет себя как функция Сличителей в String, в том, что она только возвращает истину в случае, если вся строка соответствует шаблону RegEx.

Конструкция Pattern/Matcher может использоваться, чтобы определить, соответствует ли определенная подстрока шаблону и, если это необходимо, заменить некоторые части этой строки. То есть мы используем этот подход для того, чтобы замаскировать определенные пароли в операторах журнала с помощью настраиваемой Logback CompositeConverter, который содержит подобную логику, как показано ниже:

Pattern urlAuthPattern = Pattern.compile("//(.*?):.*[email protected]"); 
Matcher matcher = urlAuthPattern.matcher("ftp://user1:[email protected]:21/path/to/somewhere"); 
if (matcher.find()) { 
    // should return ftp://user1:[email protected]:21/path/to/somewhere 
    return matcher.replaceAll("//$1:[email protected]"); 
} 
Смежные вопросы