2013-07-20 74 views
0

什麼是匹配整個字符串的良好正則表達式,除非字符串是「/」?正則表達式匹配整個字符串,除非字符串是/

使用案例:這是一個重寫規則。使用機架重寫,即追加尾部/。

我需要:

/foo -> /newpath/foo 
/-> newpath 

第二個例子沒有尾部斜槓。

看看Regex - Match Entire String Unless,但不知道如何使它適用於除「/」之外的所有設備。

在Ruby中工作。

+4

爲什麼一個正則表達式可以說''string「!=」/「'? – squiguy

+0

@squiguy會導致使用正則表達式在.htaccess中寫入重寫規則 – alfasin

+0

@alfasin在這種情況下,應該使用否定字符類。 – squiguy

回答

2

這是完全錯誤的使用正則表達式用於此目的,但根據您的要求:

re = %r{(?!\A/\z)(\A.*\z)} 

"foo"[re] #=> "foo" 
" /"[re] #=> " /" 
"/ "[re] #=> "/ " 
"/"[re] #=> nil 

如果你想要得到的字符串,除非字符串是"/",做到這一點的方法是:

string unless string == "/" 
+0

那麼你會怎麼做呢? https://github.com/jtrupiano/rack-rewrite –

+0

我將它的用途添加到答案中。 – sawa

+0

如果爲此目的使用正則表達式是完全錯誤的,那麼你會怎麼做? –

1
rewrite %r{.*}, lambda { |match, rack_env| 
    url = match[0] 
    url == "/" ? "newpath" : "/newpath#{url}" 
    } 
+0

你的解決方案對我來說有點有趣......但是想知道你爲什麼使用'lambda'? –

+0

@Priti,因爲機架重寫文檔說你可以。 – 7stud

+0

請鏈接該文件... –