Использовать переменные в сопоставителе шаблонов

У меня есть следующее:

if (mobile.matches("[0-9]{6,20}")) {
   ...
}

Но хотелось бы заменить {6,20} значениями переменных, поскольку в некоторых случаях они были динамическими.

I.e.

int minValue = 11;
int maxValue = 20

if (mobile.matches("[0-9]{minValue,maxValue}")) {
   ...
}

Как включить переменные в Reg Exp?

Спасибо


person Thomas Buckley    schedule 25.04.2012    source источник


Ответы (2)


Используйте простую конкатенацию строк Java, используя знак плюс.

if (mobile.matches("[0-9]{" + minValue + "," + maxValue + "}")) {

Действительно, как предложил Майкл, компиляция лучше для производительности, если вы ее часто используете.

Pattern pattern = Pattern.compile("[0-9]{" + minValue + "," + maxValue + "}");

Затем используйте его при необходимости следующим образом:

Matcher m = pattern.matcher(mobile);
if (m.matches()) {
person Martijn Courteaux    schedule 25.04.2012
comment
Вы можете предварительно скомпилировать средство сопоставления регулярных выражений, если собираетесь использовать его часто и значения не изменятся. - person Michael Shopsin; 25.04.2012
comment
Это работает, я просто подумал, что может быть какой-то другой рекомендуемый способ. Ура Мартейн... и Энди. - person Thomas Buckley; 25.04.2012

Вы также можете использовать String.format("[0-9]{%s,%s}", minValue, maxValue)

person P Szuberski    schedule 06.04.2021