0

我基本上不了解正则表达式,但我需要一个正则表达式语句,它可以识别/URL 中的任何内容。

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

我想要做的是将 URL 重定向(http://)localhost/sweettemptations/sweets(http://)localhost/sweettemptations/available-sweets很容易做到的,但我还需要将任何类型的 sweet 重定向回(http://)localhost/sweettemptations/available-sweets. 所以说我需要重定向(http://)localhost/sweettemptations/sweets/*(http://)localhost/sweettemptations/available-sweets.

如果有人可以通过告诉我如何编写正确的正则表达式来匹配 URL 中 sweets/ 之后的所有内容来提供帮助,我们将不胜感激。

4

2 回答 2

1

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

于 2012-08-07T11:43:23.350 回答
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://)localhost/sweetemptations/sweets/* 匹配的任何字符串

进入你提供的另一个(没有在最后添加你的 * 部分匹配)我会使用正则表达式来匹配 URL 中的模式,但他们只是用所需的字符串替换整个字符串:(http:// )localhost/sweetemptations/available-sweets

因此,如果您想要 URL:

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

变成:

  http://localhost/sweettemptations/available-sweets

而不是:

  localhost/sweettemptations/available-sweets/somethingmore.html

然后解决方案更简单,不需要组:)。

这样做时,我会确保您不匹配“本地主机”部分。此外,我假设 (http://) 确实意味着前面的可选 http://,因为 (http://) 不是有效的协议前缀。

所以如果这是你想要的,那么这应该与模式匹配:

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

此正则表达式将可选地匹配 http:// 部分与主机(可以是 localhost、IP 或主机名)。如果你愿意,你可以在最后省略 .*。

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

于 2012-08-07T11:51:12.860 回答