正则表达式匹配url与特定的单词

时间:2015-06-01 18:13:46

标签: regex apache

使用apache重写 我想将网址重定向到具有特定模式的文件

images/gallery/photos/album/thumb/image.jpg
images/gallery/photos/album/view/image.jpg
images/gallery/photos/album/image.jpg

使用正则表达式我想匹配(照片/相册/)作为一部分 如果提供,则返回(thumb | view) 最后返回url的最后一部分(image.jpg)

我的最终方法是

^images/gallery/(.*/)*((view|thumb)/)+(.*)$
Array
(
    [1] => photos/album/
    [2] => thumb/
    [3] => image.jpg
)

如果提供ONLY(view | thumb),哪个工作完美,但如果用+替换?,则正则表达式返回images/gallery/thumb/而不传递(拇指)作为部分

^images/gallery/(.*/)*((view|thumb)/)?(.*)$
Array
(
    [1] => photos/fresh-water-fish/thumb/
    [2] => 
    [3] => Plant_Aquarium.jpg
)

获得(view | thumb)if提供的最佳解决方案是什么

3 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

^images/gallery/((?:[^./]*/)*?)((view|thumb)/)?([^/]*)$

请参阅DEMO

答案 1 :(得分:1)

^images/gallery/(\w+/\w+)/?(view|thumb)?/?([^/]*)$

这个匹配:

$1 : "photo/album"

$2 : "view", "thumb" or ""

$3 : "image.jpg"

答案 2 :(得分:0)

尝试使用而不是
images/gallery/(.*/)*((view|thumb)/)?(.*)$
这一个:
images/gallery/(.*/)*((view|thumb)?/)(.*)$

我不敢为什么贪婪的正则表达式?'不要在小组上工作,但它在具体价值方面运作良好(' [1,2]','。','(text | text2) '等。)