我一直在嘗試創建一個正則表達式來匹配 URL 路徑的某個部分,但不可否認的是,我以前的正則表達式經驗很少,并且在閱讀了幾個小時的各種正則表達式教程后,我似乎陷入了困境。此時我的錯誤可能非常簡單,但我什至不確定要搜索什么以及我需要什么類型的正則表達式運算符(我查看了一大堆其他問題,雖然有些問題相似,但我沒有找不到完全匹配)。我必須匹配下面的任何 URL 路徑:/服務/服務//服務/頁面/2/服務/頁面/140/但它不應與以下任何一項匹配:/服務/頁面/servicesx/頁面/服務/頁面 /服務/頁面//服務/頁面/服務/頁面/2//服務/foo/服務/foo/頁面我需要匹配斜杠 / 后跟“服務”,可選地后跟斜杠,然后精確地跟隨頁面和斜杠以及任意數量的數字和可選的尾部斜杠,或者如果不精確跟隨,則不應跟隨任何其他內容?!皃age”后面應該始終有數字,否則“service”后面沒有數字的“page”也是無效的,“services”后面不能有任何其他內容。我一直在使用這個工具進行實驗: https: //regex101.com/到目前為止,我已經想出了這個正則表達式,它不起作用,因為它仍然匹配太多(它匹配“/services/”)。\/\bservices\b\/?(?:page\/[0-9]+)?\/?如果重要的話,我需要在 PHP 中使用正則表達式。
1 回答

千萬里不及你
TA貢獻1784條經驗 獲得超9個贊
您的正則表達式缺少字符串開頭和結尾錨點,這就是它匹配/services/
您不想匹配的 URL 的原因。此外,您不需要\b
其中的斷言,因為/
之前和之后services
意味著這\b
將是正確的。最后,如果您更改分隔符(例如更改為~
),則無需轉義正則表達式中的正斜杠。這將做你想做的事:
^/services/?(?:page/[0-9]+)?/?$
- 1 回答
- 0 關注
- 197 瀏覽
添加回答
舉報
0/150
提交
取消