正则表达式匹配网址有或没有'文件夹'

时间:2014-07-16 15:30:43

标签: regex

我正在努力获得正确的正则表达式以匹配以下内容;

content/foo/B6128/8918/foo+bar+foo

OR

content/foo/B6128/8918/foo+bar+foo/randomstringnumsletters

我确信这并不复杂,我几乎就在那里,只是无法让它变得完美。这是我尝试过的;

content\/(\w+)\/(\w+)\/(\d+)\/([^\/]+[\w]+)\/?(\w*)$

使用此在线测试人员:http://regex101.com/r/sB8rR5/2

它仍匹配带有此字符串content/foo/B6128/8918/foo+bar+foo的第5个项目;

虽然从技术上讲这个模式与OR url结构匹配。当没有randomstringnumsletters时,我不希望它与第5项匹配。

在玩了一会儿之后,我确实意识到有些元素与我尝试过的东西是多余的,但我没有随处可见......

3 个答案:

答案 0 :(得分:2)

只需将最后一个捕获组变为可选组,然后将\w*更改为最后一个捕获组中的\w+,以防止第5组捕获空字符。

content\/(\w+)\/(\w+)\/(\d+)\/([^\/]+[\w]+)\/?(\w+)?$

DEMO

答案 1 :(得分:0)

看起来你的REAL模式应该是:

content\/((?:\w+\/?)+)

DEMO

还是我错了?这将匹配整个字符串(在content/之后)并将其全部/分隔。您可以从那里解析每个变量。

答案 2 :(得分:0)

您可以将每个部分作为一个数组,然后选择您需要的部分......

DEMO