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]),但仍然不能按我想要的方式工作。请帮忙!
不知道关于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)
或许可以试试......
^(fr-ca|\d).*$
当然,这一个正则表达式匹配整个字符串(但因为它有结束刺痛$
锚)。你想抽出多场比赛吗?
在重读后:)
^(fr-ca|\d+)(\/\d+|\/)?$
1234gg通过该表达式,它不应该! –
“我需要捕捉以'fr-ca'开头的任何东西或者是一个数字”:) –
“,并且两种情况都可以有尾随的'/'(正斜杠),但这都是......”) –
^(\d+(\/\w*)?)$|^(fr-ca\/\d+)$|^(fr-ca\/?)$
这个工作对我所有的例子的光。我不确定你是否打算使用这个正则表达式,所以我不知道它是否捕获到你想捕获的东西。
检查我的更新回答 – Kent