2016-12-20 2 views
0

Я реализую запрос RESTful с спецификацией JPA. Хотелось бы, чтобы обрабатывать URL с несколькими критериями, который выглядит следующим образом:Почему это соответствие шаблону регулярного выражения не работает

http://localhost:8080/samples?search=lastName:doe,age>25

Строка поиска будет соответствовать шаблону (\\w+?)(:|<|>)(\\w+?) отделенный «».

Поэтому я написал следующий код для получения Matcher из строки:

static Matcher getMatcherFromString(String str) {                                                                                                                                                                         
    Pattern pattern = Pattern.compile("(\\w+?)(:|<|>)(\\w+?),"); 
    Matcher matcher = pattern.matcher(str + ","); 
    return matcher; 
} 

Этот метод затем вызывается контроллером для разбора URL.

Однако, когда я протестировал метод со строкой analysisId:fdebfd6e-d046-4192-8b97-ac9f65dc2009, он возвращает null. Почему я ошибался для соответствия шаблону?

+0

Я бы сказал, потому что '\ w' не соответствует' -' – Fallenhero

+0

@Fallenhero '\ w' для слов. Что я должен использовать вместо этого? – ddd

+0

Я не знаю, что вам нравится, но, может быть, '[0-9a-zA-Z _-]'? – Fallenhero

ответ

2

Я получил эту работу (: | < |>) [A-Za-Z0-9 \ -] *,

Я использовал это, чтобы понять это: https://regex101.com/r/fOEzd9/1

(\ W +?)

Я думаю, что главная проблема заключалась в том, что число \ w не совпадает ни с одним словом. Вам также необходимо учитывать тире.

+0

Работает как очарование. Благодарю. – ddd

0

У меня была такая же проблема, и я решил, используя эту строку:

"(\\w+?)(:|<|>)(\\w+?)," 
Смежные вопросы