结合两个正则表达式

时间:2014-11-17 12:36:23

标签: regex

我有两个正则表达式,在独立使用时工作得很好。

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).* 

但它不起作用。

任何人都可以帮助加入以上两个正则表达式吗?

2 个答案:

答案 0 :(得分:3)

|运算符周围有额外的空格:

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

您的解决方案会尝试匹配"字符串的结尾,然后是空格,"或者"空格然后是字符串的开头。"请记住,空格在正则表达式中很重要。

答案 1 :(得分:2)

组合表达式中的空格是错误的。您需要在行尾或行首之前留出空格,这在面向行的输入中是不可能的。

作为进一步的改进,你可以删除多余的"任何东西"比赛的一部分,以及大量冗余的括号。

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

另请注意正确引用文字句号(单个.匹配任何字符)。