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

时间:2014-09-18 15:06:37

标签: regex

我有这样的网址:

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

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

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

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

这个与第一个网址匹配,第三个网址失败,很棒。

但它最终匹配第二个和第四个网址,将字词捕捉到破折号。我正在把这头发拉出来,任何指针都很受欢迎。提前致谢 ! :)

3 个答案:

答案 0 :(得分:0)

请改用此正则表达式:

test/([^/]+)

它将捕获test/后的所有非斜杠。

如果需要,可以适当地逃避斜杠。

答案 1 :(得分:0)

首先抛弃\b。匹配字边界和网址的内容可以包含非字字符。

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

以下是正则表达式:

  • 匹配字符串的开头
  • 匹配一个或多个字符,直到第一个正斜杠
  • match / test /
  • 将一个或多个字符与另一个斜杠匹配
  • 可选地匹配斜杠
  • 匹配字符串的结尾

<强> REGEX

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

REY

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 :(得分:0)

^(?=[^\/]*\/[^\/]*\/[^\/]*$).*

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

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