我正在尝试使用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
时停止。
希望这是有道理的。
答案 0 :(得分:4)
将您的.
替换为[^\/]
,否则这些点会与某些斜线匹配。
答案 1 :(得分:0)
尝试使用此模式:
preg_match('~^/test(?>/[^/]++){1,2}+$~', $yourstring)