2014-11-17 3 views
1

Я знаю, что это очень простой вопрос, но поскольку я очень плохо в regex, вам нужно задать ниже вопрос. Я хочу написать регулярное выражение в Java, которая будет соответствовать ниже двух шаблонов URL данных:Регулярное совпадение с шаблонами url

{contextPath}/javax.faces.resource/** 

{contextPath}/rfRes/** 

URL-адрес будет читаться из объекта запроса HTTP и будет сравниваться с использованием объекта Java шаблон, как показано ниже:

Pattern p = //regex here ; 
p.matcher(r.getRequestURL().toString()).matches(); 

Может ли кто-нибудь помочь мне написать опыт регулярного выражения над двумя URL-адресами?

+0

Вы соответствие буквальным '' ** в URL? – anubhava

+0

Он указывает что-либо после /. Так что его подстановочный знак там – Atul

+0

У вас есть ссылка «HttpServletRequest», чтобы иметь возможность получить контекст? – anubhava

ответ

1

Вы можете использовать это:

boolean matches = r.getRequestURI().matches(".*?/(javax\.faces\.resource|rfRes)/.*"); 
+0

Спасибо за ваше отражение. Но я полагаю, что выражение выше будет точно соответствовать /javax.faces.resource/[any character]. Но нужен [любой символ] /javax.faces.resource/ [любой символ]. Будет ли работать /*(javax.faces.resource|rfRes).*? – Atul

+0

ok попробуйте обновить regex сейчас. – anubhava

1

вы можете использовать это:

.*?(?:\/javax\.faces\.resource\/|\/rfRes\/).*$ 

демо здесь: http://regex101.com/r/rV5mR8/2

Он проверяет, является ли строка начать с любой из двух вариантов, которые вы хотите.

+0

Спасибо aelor за повторение. Нам действительно не нужен contextPath. Это может быть что угодно. Нам просто нужно проверить javax.faces.resource/** и/rfRes/**. В этом случае нам нужно использовать contextPath в выражении регулярных выражений? – Atul

+0

@Atul, тогда вы можете просто удалить эту часть, проверить мое обновление – aelor

Смежные вопросы