2011-03-20 178 views
0

嗨,我有串:簡單的regex幫助

/new/krymson/ 

目前,我有正則表達式:

/\/new\// 

這將刪除:

/new/ 

我怎麼會包括成正則表達式的方式去除最後/

也串來自於一個URL,這樣可能是:

/new/krymson/admin/interface/modules/ 

/new/後的任何數量的「鑰匙」的。

感謝提前:)

編輯: 我使用PHP。

我知道,這正則表達式\/$選擇字符串中的最後/但如何讓選擇/new/最後/

+0

你工作在哪種語言?實現這一點幾乎肯定比使用正則表達式更好。在Python中:''/ new/krymson/admin/interface/modules /'。split('/')[2]' – Johnsyweb 2011-03-20 02:28:57

+3

Btw。如果您指定您使用的編程或腳本語言,它會有所幫助。 – ChrisWue 2011-03-20 02:30:00

+0

「在提出正則表達式問題時,請始終爲您正在使用的特定編程語言或工具(例如,Perl,Python或Java; vi,emacs或ɢɴᴜgrep等)添加標籤。」 --http://計算器。com/tags/regex/info – Johnsyweb 2011-03-20 02:31:49

回答

0

我決定採取不同的方法,而不是取代我不想要的東西,提取我想要的東西。

我已經完成了這段代碼,只是爲了閱讀這個問題的其他人的幫助。

$string = '/new/krymson/admin/interface/modules/'; 
$pattern = ' /(?<=\/new\/).*(?=\b)|(?=\/$)/'; 
preg_match($pattern, $string, $match); 
$shortened = $match[0]; 

編輯:

感謝所有的答覆!

+0

你想如何處理類似於'/ foo/new/krymson /'或甚至'/ foo/new/bar/new/krymson'的正則表達式? – ridgerunner 2011-03-20 03:31:40

+0

完整的網址看起來像'yourdomain.com/new/krymson'。 '/ new /'只是因爲它是從頭開始構建網站的新版本。所以如果用戶輸入/ new/foo/krymson,它將返回正確的頁面或404 – FraserK 2011-03-20 05:25:08

0
/\/new\/(.*)\//1/ 

.*第一場比賽 的$右錨件後抓住一切,所以它會得到最後/

您正在更換與內容的字符串(*)......這就是語言依賴

在Perl中,例如,這將是:

$myString =~ s/\/new\/(.*)\/$\//$1/; 

編輯:因爲我們現在知道我們談論的PHP:

<?php 
$string = '/new/krymson/admin/interface/modules/'; 
$pattern = '/\/new\/(.*)\/$\//'; 
$replacement = '$1'; 
$string = preg_replace($pattern, $replacement, $string); 
?> 
+0

我以爲*總是貪婪 - 所以你不應該需要$ – ChrisWue 2011-03-20 02:29:18

+0

他想擺脫尾部斜線(編輯:哦,對...我明白你的意思,嗯) – 2011-03-20 02:30:50

+0

隨着錨的正則表達式引擎*可能*能夠更好地優化正則表達式。它也更加明確了正則表達式的期望意圖 - 我會把它放進去。 – 2011-03-20 02:41:24

1

更新:現在我們知道這是PHP的另一個解決方案是

$parts = explode("/", $str); 
array_shift($parts); 
$str = implode("/", $parts);