0

我正在尝试使用preg_match以下正则表达式匹配多个字符串:

#^/test/(.+?)(\/.+^/?)?$#

以下字符串上的结果如下

匹配(应该匹配)

preg_match('#^/test/(.+?)(\/.+?)?$#', '/test/segment'); // true
preg_match('#^/test/(.+?)(\/.+?)?$#', '/test/segment/another-segment'); // true

不匹配(不应该匹配)

preg_match('#^/test/(.+?)(\/.+?)?$#', '/test'); // false

匹配(不应该匹配)

preg_match('#^/test/(.+?)(\/.+?)?$#', '/test/segment/another-segment/yet-another/segment'); // true

谁能告诉我如何使最后一个失败?分解正则表达式,本质上它应该匹配一个文字/test,后跟一个 required/something和一个可选/something,但在任何下一次出现/something.

希望这是有道理的。

4

2 回答 2

4

替换你.的 by [^\/],否则点会匹配一些斜线。

于 2013-05-16T15:20:31.830 回答
0

试试这个模式:

preg_match('~^/test(?>/[^/]++){1,2}+$~', $yourstring)
于 2013-05-16T15:24:36.027 回答