2012-03-06 258 views
0

我有這樣一些網址:正則表達式在字符串中一個斜線

dir-1 
dir-1/dir-2 
dir-1/dir-2/dir-3 
dir-1/dir-2/dir-3/dir-[n]..and so on.. 

我現在的正則表達式(與PHP)看起來是這樣的:

/^([[:lower:][:digit:]\-\/]+)$/ 

所以正則表達式的所有URL匹配。但在我的情況下,我只需要第一個和第二個版本,以便沒有或只有一個斜槓。

我多次試圖找出正確的方法,但沒有結果。

+1

多一點信息,爲什麼你需要專門使用正則表達式將是有益的。到目前爲止,我認爲爆炸的答案是最好的,除非有一個特定的原因 - 你必須使用正則表達式。 – Blake 2012-03-06 20:45:19

+0

我目前有大約20.000個URL(將來會有很多很多),它們有第一個和第二個版本的組合,其次是靜態目錄級別。 Exmaples:/ lastname-1/dates// lastname-2/dates// lastname-1/firstname-1/dates /等等。我試圖找出處理這個問題的權利,但我仍在開發中: )但是Amber的第一個答案目前是正確的。 – marvin 2012-03-06 21:17:14

+1

你是從靜態文本源中挖掘出來的,還是你生成的東西?如果這是你在php中生成的東西,我仍然喜歡@Lix下面的爆炸答案。我只是想知道爲什麼你特別需要正則表達式(因爲在大多數情況下它可以(也應該)被避免)。 – Blake 2012-03-06 21:22:13

回答

2

只需匹配該組字符(減去/),然後再選擇/,然後再選擇該組字符(可選)。

/^([[:lower:][:digit:]-]+\/?[[:lower:][:digit:]-]*)$/ 
+0

O,I C ...已刪除以前的評論和+1。 – heltonbiker 2012-03-07 12:30:01

2

你可以使用斜線作爲分隔符剛爆炸的字符串 -

$str = "dir-1/dir-2";  
$splitArr = explode('/',$str); 
  • 如果得到的陣列具有一個以上的元素,然後斜線是存在的。
  • 超過兩個元素==多個斜槓!
array (
    0 => 'dir-1', 
    1 => 'dir-2', 
) 

至於你的問題指出你是不是在談論any old string可變專門買的URL,請務必從字符串的開頭刪除httphttps協議:

如:https://marvin.com/dir-1/dir-2

您可以使用$_SERVER[REQUEST_URI]變量 - 這將返回相對於站點DOCUMENT ROOT的當前URL。

所以https://marvin.com/dir-1/dir-2$_SERVER[REQUEST_URI]是:

/dir-1/dir-2(眼熟?)

explode()你也可以使用array_shift()後,除去初始斜線和
變戲法!你避免使用正則表達式!

Some people, when confronted with a problem, think 「I know, I'll use regular expressions.」 Now they have two problems.

相關問題