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>。这样就不允许使用未闭合的大括号。最简单的方法是最好的:)