我有模式:PHP修改的正则表达式
/^(?:{?[a-z0-9\-_]+\??}?\/)+$/
现在,这些字符串匹配的模式
user/1/modify/
user/{id}/modify/
user/{id?}/modify/
这是确定的,但现在这种模式匹配
user/{id?/modify/
如果左大括号开始它必须以正确结束。我试着用前视,但我不知道这是正确的方式。
我有模式:PHP修改的正则表达式
/^(?:{?[a-z0-9\-_]+\??}?\/)+$/
现在,这些字符串匹配的模式
user/1/modify/
user/{id}/modify/
user/{id?}/modify/
这是确定的,但现在这种模式匹配
user/{id?/modify/
如果左大括号开始它必须以正确结束。我试着用前视,但我不知道这是正确的方式。
这应该工作:
^(?:(?:{\w+\??}|\w+)\/)+$
https://regex101.com/r/yO3pA5/1
它试图在集合[A-Za-z0-9_]
后跟可选?
内{}
的比赛中任何事情,然后尝试匹配相同的一组没有的{}
S(和可选?
,但你可以添加回in),然后是/
。这样它不会允许未封闭的大括号。
您可以添加一个正向前查找到第一个条件匹配,以保证右括号有:
^(?:(?:{(?=[\w-]+\??}))?[\w-]+\??}?\/)+$
([\w-]
相当于[a-z0-9\-_]
)
最简单的方法是最好的:) – Mati