在URL的形式中,我使用开头的两个假子目录来表示区域和语言:
/gb/en/tours/lesson-observation当开头的两个假子目录分别为2-3和2-5字符时,此正则表达式匹配。(附带说明:我不知道为什么要在这里使用{1,2}而不是{2,3}。)
/^\/.{1,2}[^\/]\/.{1,4}[^\/]\/(.*)/当请求的URL与^/2-3chars/2-5chars/模式不匹配时,我如何获取原来请求的URL的全部内容,以便重定向到/gb/en$1。(这是需要的,因为网站的英国区域和英语版本是默认的,如果在请求的URL中找不到区域和语言代码,则应该使用。)
示例:
/page-name
is not matched by the /2-3/2-5 pattern and so should be redirected to:
/gb/en/page-name
/ca/fr/page-name
is matched by the /2-3/2-5 pattern and so should not be redirected发布于 2013-02-21 03:59:24
为了与此相匹配:
/gb/en/tours/lesson-observation您可以使用:
/[^/]{2,3}/[^/]{2,5}/.*现在,您需要检测前两个段不在这些范围内的时间,因此第一个段高于或低于2-3个字符:
/[^/]?/ <-- 0 or 1 characters
/[^/]{4,}/ <-- 4 or more characters
/(?:[^/]?|[^/]{4,})/ <-- Combine the above two with an OR (|)同样,关于第二部分:
/(?:[^/]?|[^/]{5,})/ <-- 0 or 1 characters, or 5 or more characters将两者结合起来,您就有了一个正则表达式,用于任何与我们的第一个正则表达式不匹配的内容:
/(?:[^/]?|[^/]{4,})/(?:[^/]?|[^/]{5,})/.*注意,在所有这些正则表达式中,我省略了分隔符,但请记住,您不必使用/作为分隔符。您可以使用#或~或任何您想要的字符。好处是:如果不使用/作为分隔符,则可以在最终正则表达式中不对/进行转义:
#/(?:[^/]?|[^/]{4,})/(?:[^/]?|[^/]{5,})/.*# <-- # is the delimiter编辑:,因为第二个URL段是可选的,所以第二个段需要这样的内容:
(?:/(?:[^/]?|[^/]{5,})/)?将它带回到完整的正则表达式中,我们得到(带有锚和分隔符):
#^/(?:[^/]?|[^/]{4,})(?:/(?:[^/]?|[^/]{5,})/)?.*$#https://stackoverflow.com/questions/14994085
复制相似问题