PHP修改正则表达式

PHP修改正则表达式,php,regex,Php,Regex,我有一个模式: /^(?:{?[a-z0-9\-_]+\??}?\/)+$/ 现在这些字符串与模式匹配 user/1/modify/ user/{id}/modify/ user/{id?}/modify/ 没关系,但现在这个模式匹配了 user/{id?/modify/ 如果左大括号开始,则必须以右大括号结束。我尝试过使用“向前看”,但我不知道这是正确的方法。您可以在第一个条件匹配中添加积极的向前看,以确保结束括号在那里: ^(?:(?:{(?=[\w-]+\??}))?[\w-]+\?

我有一个模式:

/^(?:{?[a-z0-9\-_]+\??}?\/)+$/
现在这些字符串与模式匹配

user/1/modify/
user/{id}/modify/
user/{id?}/modify/
没关系,但现在这个模式匹配了

user/{id?/modify/

如果左大括号开始,则必须以右大括号结束。我尝试过使用“向前看”,但我不知道这是正确的方法。

您可以在第一个条件匹配中添加积极的向前看,以确保结束括号在那里:

^(?:(?:{(?=[\w-]+\??}))?[\w-]+\??}?\/)+$
[\w-]
相当于
[a-z0-9\-\\\\u]

这应该可以:

^(?:(?:{\w+\??}|\w+)\/)+$


它尝试匹配集合
[A-Za-z0-9.]
中的任何内容,然后在
{}
s中添加可选的
,然后尝试在没有
{}
s的情况下匹配同一集合(以及可选的
,但您可以将其添加回),然后是
//code>。这样就不允许使用未闭合的大括号。

最简单的方法是最好的:)