合并两个正则表达式

4

我有两个正则表达式,当它们独立使用时都能完美地工作。

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

但它没有起作用。 请问有人能帮忙将上述两个正则表达式合并吗?

为什么要合并?只需检查两者是否都为真或其他什么东西。 - Maroun
2个回答

7
你在 | 运算符周围有额外的空格:
Your original regex
^.+\.((jpeg)|(gif)|(png))\s*$ | ^.+(javax.faces.resource|rfRes).*
^.+\.((jpeg)|(gif)|(png))\s*$|^.+(javax.faces.resource|rfRes).*
Fixed regex                  ^
                             |

您的解决方案将尝试匹配“字符串结尾然后一个空格”或“一个空格然后是字符串开头”。请记住,在正则表达式中,空白字符是有意义的。

哈,我完全错过了……这是正确的解决方案,+1。另一种选择是使用扩展标志 eXtended - Unihedron
@Doorknob:感谢您的帮助。它起作用了。我真的错过了空格。 - Atul

2
您的组合表达式中的空格是错误的。您需要在行末或行首之后添加空格,这在面向行的输入中是不可能的。
为进一步改进,您可以删除匹配的多余“anything”部分以及许多冗余的括号。
javax\.faces\.resource|rfRes|\.(jpeg|gif|png)\s*$

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接