簡體   English   中英

正則表達式解決方案以查找正則表達式模式並對其進行解析。

[英]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/ 我不希望正則表達式對此有所幫助,而只是檢測模式並進行匹配。

例如。 如果給定的$URLdev.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM