2012-08-07 84 views
0

之后的任何东西我基本上不是关于正则表达式的线索,但我需要一个正则表达式语句,它会识别URL中/之后的任何内容。正则表达式来匹配/

基本上,我正在为某人开发一个网站,并且页面的URL(课程的本地URL)是(http://)localhost/sweettemptations/available-sweets。此页面充满了自定义帖子类型(这是一个WordPress站点),其URL为(http://)localhost/sweettemptations/sweets/sweet-name

我想要做的是将网址(http://)localhost/sweettemptations/sweets重定向回(http://)localhost/sweettemptations/available-sweets这很容易做到,但我也需要将任何类型的甜点重定向回(http://)localhost/sweettemptations/available-sweets。所以说我需要将(http://)localhost/sweettemptations/sweets/*重定向回(http://)localhost/sweettemptations/available-sweets

如果有人能帮助我告诉我如何编写正确的正则表达式来匹配网址后面的所有内容,这将非常感激。

回答

1

要做到你的要求,你需要使用群体。在正则表达式组中允许你隔离整个比赛的部分内容。

例如:

input string of: aaaaaaaabbbbcccc 

regex: a*(b*) 

的括号标记在这种情况下的基团将是组1,因为它是在图案中的第一个。

注意:组0是隐含的,并且是完全匹配。

所以在我的上述情况下的比赛将是:

group 0: aaaaaaaabbbb 
group 1: bbbb 

为了达到你想要的糖果图案上方是什么,你只需要投入一组年底左右。

possible solution: /sweets/(.*) 

更准确地说,您在组前的模式越不可能出现可能的误报。

如果你真正想要的是在最后以匹配任何/你可以采取另一种方法:

possible other solution: /([^/]*) 

的图案上方会发现一个/与字符的字符串,是不是又/并保持在组1中。这里的问题是你可以匹配URL中没有糖果的东西。

请注意,如果您不介意/在开始时只是删除(和),你不必担心组。

我喜欢用http://regexpal.com/来测试我的正则表达式。它会用不同的颜色标记不同的匹配。

希望这会有所帮助。

我可能在我原来的帖子中误解了你的要求。

,如果你只是想改变匹配 任何字符串(HTTP://)本地主机/ sweettemptations /糕点/ *

为您提供(结尾没有你的*加入部分匹配另一个)我会使用正则表达式来匹配URL中的模式,但它们只是盲目地用所需的字符串替换整个字符串: (http://)localhost/sweettemptations/available-sweets

所以,如果你想网址:

http://localhost/sweettemptations/sweets/somethingmore.html 

变成:

http://localhost/sweettemptations/available-sweets 

,而不是到:

localhost/sweettemptations/available-sweets/somethingmore.html 

然后将溶液比较简单,不需要组:)。

当我这样做,我会确保你不匹配的“本地主机”的一部分。另外我假设(http://)真的意味着一个可选的http://,因为(http://)不是有效的协议前缀。

所以如果这是你想要的,然后这应该匹配的模式是什么:

(http://)?[^/]+/sweettemptations/sweets/.* 

这个正则表达式将匹配HTTP://部分任选一台主机(无论是本地主机,一个IP地址或主机名称)。如果你愿意,你可以在最后省略。*。

如果该模式匹配,只需将整个网址替换为您想要重定向到的网址即可。

+0

感谢您的详细解答。我很快就会尝试一下,看看它是否能够正常工作,并随时通知您。再次感谢。 – cian1991ferrari 2012-08-07 12:10:17

+0

非常感谢。只需/.*在URL的末尾工作完美 - 显示我是多少正则表达式noob。非常感谢! – cian1991ferrari 2012-08-07 14:58:02

+0

非常欢迎。 – Rob 2012-08-08 01:31:12

1

使用正则表达式(?<=://).+

+0

我在/ sweets/part之后使用它,所以它可能是/sweets/(?<=://).+? – cian1991ferrari 2012-08-07 12:09:48

+0

我还没有完全理解你写的问题,如果你想在一些文本后面使用consctruction'(?<=)'来捕捉averythink,那么它就是lookbhind,任何文字都在后面,f.e. '(?<= Q)。+' - 这个正则表达式在Q后面捕获文本,'。+'是所有符号 – 2012-08-07 12:24:21