2014-11-17 5 views
2

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

First : ^.+\.((jpeg)|(gif)|(png))\s*$ : search for .jpeg,gif or png at the end of url 
Second : ^.+(javax.faces.resource|rfRes).* : search for two url patterns 

Я хочу, чтобы объединить две вышеупомянутые выражения, такие, что «URL заканчивается в любом из образа» ИЛИ «URL имеет javax.faces.resource или rfRes на своем пути»

Я попытался с помощью | оператор, чтобы присоединиться к ним, но кажется, что он не работает, как показано ниже:

^.+\.((jpeg)|(gif)|(png))\s*$ | ^.+(javax.faces.resource|rfRes).* 

но его не работает.

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

+0

Почему сочетание? Просто проверьте, истинны ли они или нет. – Maroun

ответ

3

У вас есть лишние пробелы вокруг | оператора:

Your original regex 
^.+\.((jpeg)|(gif)|(png))\s*$ | ^.+(javax.faces.resource|rfRes).* 
^.+\.((jpeg)|(gif)|(png))\s*$|^.+(javax.faces.resource|rfRes).* 
Fixed regex    ^
          | 

Ваше решение будет пытаться соответствовать «конец строки , а затем пробел» или «пространство , а затем начало строка. " Помните, что пробелы значительны в регулярных выражениях.

+0

Ха, я полностью пропустил это ... Это правильное решение, +1. Альтернативой является использование флага e'X'tended. – Unihedron

+0

@Doorknob: Спасибо за помощь. Это сработало. Я действительно пропустил пробелы – Atul

2

Пространства в комбинированном выражении ошибочны. Вам требуется пространство после окончания строки или до начала строки, что невозможно в линейно-ориентированном вводе.

В качестве дополнительного улучшения вы можете удалить лишние «все» части матча, а также большое количество резервных скобок.

javax\.faces\.resource|rfRes|\.(jpeg|gif|png)\s*$ 

Обратите также внимание на правильное цитирование буквенных символов полных стоп (одинокий . соответствует любому символу).

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