网址重写正则表达式

时间:2011-09-21 13:44:09

标签: asp.net regex url-rewriting

使用ASP.NET,并尝试实现友好的URL重写,但我有一段时间使用正则表达式。基本上,我正在检查域名后面的网址是否正在使用法语 - 加拿大文化,或者它是否是一个数字 - 而不是一个后跟字符的数字。我需要抓住以“fr-ca”或数字开头的任何内容,并且两个场景都可以有一个尾随的'/'(正斜杠),但这就是...

fr-ca - GOOD
fr-ca / - 好的 fr-ca / 625 - 好的 fr-ca / gd - 坏的 fr-ca43 / - BAD

1234年 - 好的 1234 / - 好的 1234 / g - GOOD
1234克 - 坏 1g34 - BAD

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

4 个答案:

答案 0 :(得分:2)

不知道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 :(得分:2)

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

看到它here on Regexr,它匹配你所有的好案例,而不是坏案例。

答案 2 :(得分:1)

可能会尝试......

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

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

重新阅读帖子:)

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

答案 3 :(得分:1)

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

这适用于我所有的例子。我不确定你打算使用这个正则表达式,所以我不知道它是否正在捕获你想要捕获的内容。