2012-01-19 387 views
1

我的正則表達式技能很差。爲了讓我的js/css顯示正確的菜單,我在我的li中添加了一個「selected」類,以便js知道哪個是當前項目(因此它可以顯示下拉的其餘部分)。匹配正則表達式

我的問題是笨匹配正確的URI字符串:

<li <? if((strstr($this->uri->uri_string(),"rfid_finder/finder")) || (strstr($this->uri->uri_string(),"finder"))) {?>class="selected"<?}?> rel="home"> <?= anchor('finder','HOME')?></li> 

我用這個方法開始,但我的路線,如今更復雜一點,讓搜索和分頁。

我需要一個正則表達式會匹配所有下列途徑:

$route['finder/(:any)/(:any)/(:num)'] = "rfid_finder/finder/$1/$2/$3"; 
$route['finder/(:any)/(:any)'] = "rfid_finder/finder/$1/$2"; 
$route['finder/(:any)'] = "rfid_finder/finder/$1"; 
$route['finder'] = 'rfid_finder/finder'; 

但是當用戶訪問:

rfid_finder/search_form 

第一菜單沒有給出選擇的類。

更新

我想第一個代碼段相匹配的路由,而不是rfid_finder/search爲route-我有另一行代碼,其中rfid_finder/search_form路由匹配。我的問題在於試圖捕捉路線使用(strstr($this->uri->uri_string(),"finder")它匹配我所有的路線,甚至rfid_finder/search_form

+0

您在哪裏寫了任何字符,是否需要任何字符或只有字母? – MrGlass

+0

:任何可以是用戶名或標籤 - 這應該是一個字符串(數字和字符) –

+0

我不明白的東西:所以一切正常,但是當你去search_form你不希望它匹配,對不對? –

回答

0

嗯,讓我知道這是否適合你。它似乎在我的測試中工作。

preg_match('|^(rfid_finder/)?finder/?([a-z0-9]+?)?(/[a-z0-9]+?)?(/\d+?)?$|i', $string) 

這裏是我的測試,例如:

$route = array(); 
$route['finder/(:any)/(:any)/(:num)'] = "rfid_finder/finder/$1/$2/$3"; 
$route['finder/(:any)/(:any)'] = "rfid_finder/finder/$1/$2"; 
$route['finder/(:any)'] = "rfid_finder/finder/$1"; 
$route['finder'] = 'rfid_finder/finder'; 


$route['finder/2313'] = 'rfid_finder/finder'; 
$route['finder/asd/dsda'] = 'rfid_finder/finder'; 
$route['rfid_finder/finder/dd/122'] = 'rfid_finder/finder'; 
$route['rfid_finder/finder/dd/122/qwewe'] = 'rfid_finder/finder'; 
$route['rfid_finder/finder/dd/asdsad/333'] = 'rfid_finder/finder'; 

foreach ($route as $string=>$match) { 
    if (preg_match('|^(rfid_finder/)?finder/?([a-z0-9]+?)?(/[a-z0-9]+?)?(/\d+?)?$|i', $string)) { 
     echo $string.' - yes'; 
    } else { 
     echo $string.' - no'; 
    } 
    echo '<br />'; 
} 

exit(); 

它搜索字符串,以確保它無論是取景還是rfid_finder開始(我真的不知道,你者優先,如果你想讓它僅從rfid_finder開始,只需刪除rfid_finder周圍的圓括號和查找器之前的尾部)

+0

回覆您的編輯。你可以嘗試使用strpos,並使用偏移量。雖然我上面發佈的正則表達式似乎是按照你的意願做的(至少從我所理解的) – Jeremy