当正则表达式模式具有特定数量的段时,将正则表达式模式匹配到 URL 中

Matching a regex pattern into an URL when it have a specific number of segments

提问人:Erick Martim 提问时间:9/18/2014 最后编辑:Erick Martim 更新时间:9/18/2014 访问量:1531

问:

我有这样的网址:

example.com/test/testurl
example.com/test/test-url
example.com/test/testurl/content
example.com/test/test-url/content

我正在这里进行重定向,因此,当它只有 2 个段(如前 2 个段)获得组中的第二个段,但在所有其他段中都失败时,我需要一个正则表达式来匹配 url。

这是我到目前为止完成的模式:

test\/(\w+)(?!\/)\b

这个与第一个 url 匹配,在第三个 url 上失败,太好了。

但它最终匹配了第二个和第四个 url,将单词捕获到破折号。我正在拔掉我的头发,任何指示都是值得赞赏的。提前致谢 !:)

正则表达式

评论


答:

1赞 Toto 9/18/2014 #1

请改用此正则表达式:

test/([^/]+)

它将捕获 之后不是斜杠的所有内容。test/

如果需要,请适当地转义斜杠。

评论

0赞 Erick Martim 9/19/2014
这个匹配所有字符串。我实际上想要一些与前两个相匹配的东西,但感谢您的回答。
3赞 Daniel Gimenez 9/18/2014 #2

首先扔掉.这是为了匹配单词边界,URL 可以包含非单词字符。\b

我将假设您正在自己的字符串中获取 url,而没有任何其他随附文本。

在这种情况下,以下正则表达式将:

  • 匹配字符串的开头
  • 匹配一个或多个字符,直到第一个正斜杠
  • 匹配 /test/
  • 将一个或多个字符匹配到另一个斜杠
  • (可选)匹配斜杠
  • 匹配字符串的末尾

正则表达式

^[^/]+/test/[^/]+/?$

雷伊

NO MATCH: example.com/test/
MATCH: example.com/test/testurl
MATCH: example.com/test/test-url
MATCH: example.com/test/test-url/
NO MATCH: example.com/test/testurl/content
NO MATCH: example.com/test/test-url/content

此外,如果需要添加协议,可以这样重写正则表达式:

^[^:]+://[^/]+/test/[^/]+/?$
2赞 vks 9/18/2014 #3
^(?=[^\/]*\/[^\/]*\/[^\/]*$).*

试试这个。仅当 url 有 2 个段时,这才会匹配。查看演示。

http://regex101.com/r/gG5fF6/3

评论

0赞 Erick Martim 9/19/2014
这个效果很好。但我以段计数为例,宁愿依赖固定文本“test”,就像我在示例中使用的一样。仅出于这个原因,我就选择了另一个,但感谢您的时间和准确的答案,谢谢。:)
0赞 vks 9/19/2014
@ErickMartim以为你在追求一个通用的。Thanx :)