Url重写正则表达式

问题描述:

使用ASP.NET,并试图实现友好的URL重写,但我有一段时间使用正则表达式。基本上,我在域名后面直接检查网址,看它是否使用法国加拿大文化,或者它是否是一个数字 - 而不是数字后跟字符。我需要捕捉以'fr-ca'或数字开头的任何内容,并且这两种情况都可以有'/'(正斜杠),但这都是...Url重写正则表达式

fr-ca - 好
fr -ca/- GOOD
FR-CA/625 - GOOD
FR-CA/GD - BAD
FR-ca43/- BAD

1234 - GOOD
1234/- GOOD
1234 /克 - GOOD
1234g - BAD
1g34 - BAD

这是我想出的:^(fr-ca)?/?([0-9] +)? 但它似乎并没有按照我想要的方式工作..所以我开始新鲜并想出了(^ fr-ca)|(^ [0-9]),但仍然不能按我想要的方式工作。请帮忙!

+0

检查我的更新回答 – Kent

不知道关于Asp.net,但正则表达式用grep进行测试。你可以尝试在.NET中:

kent$ cat a 
fr-ca 
fr-ca/ 
fr-ca/625 
fr-ca/gd 
fr-ca43/ 
1234 
1234/ 
1234/g 
1234g 
1g34 

更新

kent$ grep -P "(^fr-ca$|^\d+$|^(fr-ca|\d+)/(\w|\d*)$)" a 
fr-ca 
fr-ca/ 
fr-ca/625 
1234 
1234/ 
1234/g 

-

以及这未必是最好的正则表达式,但将是最直接的一个。

它配衬串

^fr-ca$ 
or ^\d+$ 
or ^(fr-ca|\d+)/(\w|\d*)$ 

the above line can be broken down as well 
    ^(fr-ca|\d+)/(\w|\d*)$ : 

starting with fr-ca or \d+ 
then comes "/" 
after "/" we expect \w or \d* 
then $(end) 
+1

正则表达式说fr-ca/gd是正确的,但它不是 – Bobby

+0

它工作得很好 – Bobby

+0

是否可以真正解释正则表达式? – Bobby

或许可以试试......

^(fr-ca|\d).*$

当然,这一个正则表达式匹配整个字符串(但因为它有结束刺痛$锚)。你想抽出多场比赛吗?

在重读后:)

^(fr-ca|\d+)(\/\d+|\/)?$

+0

1234gg通过该表达式,它不应该! –

+0

“我需要捕捉以'fr-ca'开头的任何东西或者是一个数字”:) –

+0

“,并且两种情况都可以有尾随的'/'(正斜杠),但这都是......”) –

^(\d+(\/\w*)?)$|^(fr-ca\/\d+)$|^(fr-ca\/?)$ 

这个工作对我所有的例子的光。我不确定你是否打算使用这个正则表达式,所以我不知道它是否捕获到你想捕获的东西。

什么

^(fr-ca(?:\/\d*)?|[0-9]+(\/[a-zA-Z]*)?)$ 

看到它here on Regexr,你的全部的情况好,而不是坏的匹配。