我有模式: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