在第3个'/'之后匹配字符串中的所有内容

时间:2013-10-01 14:38:14

标签: regex match

我有两种不同形式的字符串:

https://anexample.com/things/stuff

https:///things/stuff

我需要一个正则表达式,它将匹配第三个斜杠后的字符串中的所有内容,无论语法如何。一旦它达到第3个斜线,其余的字符串就会匹配。我找到了很多例子,但我似乎无法调整正确的方法让它发挥作用。提前谢谢。

4 个答案:

答案 0 :(得分:2)

您可以使用此

^[^/]*/[^/]*/[^/]*/(.*)$

Regular expression visualization

答案 1 :(得分:1)

您可以使用此正则表达式:

^(?:[^\/]*\/){3}(.*)$

并使用匹配的组#1

在javascript中:

var s = 'https:///things/stuff';
m = s.match(/^(?:[^\/]*\/){3}(.*)$/);
// m[1] => things/stuff

答案 2 :(得分:1)

假设PCRE,并且你的字符串中没有换行符:

如果3个斜杠可以在任何位置(如第一个例子):

^[^/]/[^/]*/[^/]*/(.*)$

这也可以表示为

^(:?[^/]*/){3}(.*)$

使用正面的lookbehind,您可以使用以下内容,它应该匹配您想要的内容,而不是将其放入捕获组中:

(?<=^(:?[^/]*/){3}).*$

由于使用的分隔符而导致的任何需要转义当然留给读者(如果使用/作为分隔符,则必须转义表达式中的所有/,如{{ 1}})

除了你提到的那些之外,还有一百万个其他选择,具体取决于你的确切需求。

答案 3 :(得分:0)

这样的东西应该可以工作,但是我在没有任何测试的情况下编写它,但它应该查找任意字符的三个部分,然后是斜线,然后抓住最后一部分直到行结束的所有内容 - 你可以当然会将分隔符更改为空格或其他任何内容。

^.*/{3}(.*$)