2013-07-20 69 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

请链接该文件... –