[英]Regex solution to find a regex pattern and parse it.
我正在嘗試為PHP寫一個簡單的路由器。 我正面臨一些問題。 路線示例如下。
$route = []
$route['index'] = "/";
$route['home'] = "/home";
$route['blog'] = "/blog/[a-z]";
$route['article'] = "/article/id/[\d+]/title/[\w+]";
現在,如果我們以最后一個示例為例,我希望正則表達式僅查找諸如[\\d+]
和[\\w+]
之類的模式。 我將使用explode()
來實際交叉檢查URL是否包含/blog/
, /id/
和/title/
。 我不希望正則表達式對此有所幫助,而只是檢測模式並進行匹配。
例如。 如果給定的$URL
是dev.test/blog/id/11/title/politics
我需要一些像: preg_match($route['url'], $URL)
因此,現在preg_match()
函數知道,在"/article/id/
有一個模式僅要求出現一個數字,然后,如果找到該數字,它將繼續解析,否則將顯示fail或0
。
對於處理這個復雜問題,我對正則表達式了解不多。
您的問題尚不清楚,但是如果您只想捕獲目標字符串的[\\ d +]或[\\ w +]部分,則應考慮使用方括號來捕獲子匹配項,而(?:xxx)非捕獲匹配項,它檢查模式,但不將其添加到數組中,例如:
$route['article'] = "(?:\/article\/id\/)([\d+])(?:\/title\/)([\w+])";
這只會將匹配的[\\ d +]和[\\ w +]添加到您的matchs數組中。 您會發現它們是這樣的:
$matches[0][0] and matches[1][0].
順便說一下,有關正則表達式的出色教程,請參見http://www.regular-expressions.info/tutorial.html 。
如果您事先不確定'article','id'和'title'的值,則可能至少需要確保url中給定的目錄數。 這意味着只要您知道[\\ d +]和[\\ w +]條目的位置,就可以使用
$route['article'] = "(?:\/[\w+]\/[w+]\/)([\d+])(?:\/[\w+]\/)([\w+])"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.