正则表达式匹配过多的字符串

时间:2013-05-16 15:17:24

标签: php regex

我正在尝试使用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匹配,后跟带有可选/something的必需/something,但在下次出现/something时停止。

希望这是有道理的。

2 个答案:

答案 0 :(得分:4)

将您的.替换为[^\/],否则这些点会与某些斜线匹配。

答案 1 :(得分:0)

尝试使用此模式:

preg_match('~^/test(?>/[^/]++){1,2}+$~', $yourstring)