php正则表达式匹配单词并停止

时间:2014-05-11 14:06:33

标签: php regex preg-match

我有一个类似于此http://website.com/clothes/men/type/t-shirts/color/red/size/xl...的网址,我需要在网址如此http://website.com/clothes/(men or woman)/type/any-type时执行操作

因此,如果后type/any-type还有其他值,我不想执行该操作。

我的正则表达式现在看起来像preg_match('/clothes\/(men|women)\/type\/(.*)\/?$/', $_SERVER['REQUEST_URI'])

它符合我想要的情况,但如果网址在该特定键/值对之后继续,它也匹配,因此它也匹配http://website.com/clothes/men/type/t-shirts/color/red

所以最后我需要preg_match()只匹配一个只有type/anything对的网址。

谢谢。

2 个答案:

答案 0 :(得分:3)

您可以使用:

if ( preg_match('~/clothes/(?:wo)?men/type/[^/]+/$~i', $_SERVER['REQUEST_URI'], $m) ) {
   // matches succeeds
}
  1. 您可以使用~之类的备用分隔符来避免转义每个正斜杠
  2. 如果您不希望在.*
  3. 之后匹配,请最后删除.../type/any-type/

答案 1 :(得分:2)

您可以匹配[^/]+

preg_match('(clothes/(men|women)/type/([^/]+)/?$)', $_SERVER['REQUEST_URI'])