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

我有一个这样的网址 http://website.com/clothes/men/type/t -shirts / color / red / size / xl ... </ code>当网址像这样 http://website.com/clothes/(男人或女人)/类型时,我需要执行一个动作 / any-type </ code> </ p>

因此,如果after type / any-type </ code>还有其他值,我不想执行该操作。< / p>

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

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

所以最后我需要 preg_match( )</ code>仅匹配只有 type / anything </ code>对的URL。</ p>

谢谢。</ p>
</ div>

展开原文

原文

I have a URL like this http://website.com/clothes/men/type/t-shirts/color/red/size/xl... and I need to perform an action when the url is like this http://website.com/clothes/(men or woman)/type/any-type

So if the after type/any-type there are other values I don't want to perform the action.

My regex looks like this right now preg_match('/clothes\/(men|women)\/type\/(.*)\/?$/', $_SERVER['REQUEST_URI'])

It matches the case I want, but it also matches if the URL continues after that specific key/value pair, so it also matches http://website.com/clothes/men/type/t-shirts/color/red.

So in the end I need the preg_match() to only match a URL that has only a type/anything pair.

Thank you.

dquh37673
dquh37673 我根本不介意使用.htaccess,但我会考虑使用FastRoute,这不是第一次向我推荐。
6 年多之前 回复
dongshi9526
dongshi9526 这只是一个建议,我总是害怕.htaccess怪物,但请看下面我的回答。
6 年多之前 回复
dongmi3203
dongmi3203 该项目几乎已经完成,并且全部使用.htaccess完成,并且它运行良好,所以现在我坚持使用它。我的问题是关于正则表达式,但无论如何,谢谢你。
6 年多之前 回复
dongxiaoxiao1983
dongxiaoxiao1983 真的,只需使用像github.com/nikic/FastRoute这样的路由器
6 年多之前 回复

2个回答



您只需匹配 [^ /] + </ code>:</ p>

   preg_match('(clothes /(men | women)/ type /([^ /] +)/?$)',$ _SERVER ['REQUEST_URI'])
</ code> </ pre>
</ DIV>

展开原文

原文

You can just match [^/]+:

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



您可以使用:</ p>

  if(preg_match('〜/ clothes /(  ?:wo)?men / type / [^ /] + / $ ~i',$ _SERVER ['REQUEST_URI'],$ m)){
//匹配成功
}
</ code> </ pre>


  1. 您可以使用〜</ code>之类的备用分隔符来避免转义每个正斜杠</ li>
  2. 删除。* < / code>最后如果你不想在之后匹配... / type / any-type / </ code> </ li>
    </ ol>
    </ div>

展开原文

原文

You can use:

if ( preg_match('~/clothes/(?:wo)?men/type/[^/]+/$~i', $_SERVER['REQUEST_URI'], $m) ) {
   // matches succeeds
}
  1. You can use alternate delimiter like ~ to avoid escaping every forward slash
  2. Remove .* in the end if you don't want to match after .../type/any-type/

douduan5753
douduan5753 我可以知道它到底哪个更短吗? 我看起来更长只是因为我包括if和{等等。
6 年多之前 回复
duanfazhun0383
duanfazhun0383 它有效,但我决定选择@bwoebi发布的那个,因为它更短。
6 年多之前 回复
doulu3865
doulu3865 希望这个正则表达式适合你,如果不让我知道,我会调整它。
6 年多之前 回复
dongpo0409
dongpo0409 感谢第1点,不知道。 语言不是英语,但我喜欢(?:wo)?男人的事情。 永远有帮助,再次感谢
6 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问