1

我想匹配以下单词

树 , tree.com , tree123 , 123tree , tree-up ,

我做了以下条件..它可以正常工作,但我想将它们加入一个正则表达式

bool res1=Regex.IsMatch(term, "^[a-zA-Z-.]+$",RegexOptions.IgnoreCase)  
//works well but it matches . and - if they come alone  i want a solution ?!

bool res2=Regex.IsMatch(term, "^[a-zA-Z-.]+[0-9]+$",RegexOptions.IgnoreCase) //works well 

bool res3=Regex.IsMatch(term,"^[0-9]+[a-zA-Z-.]+$", RegexOptions.IgnoreCase)//works well

我知道我可以使用

if(res1 || res2 || res3 ) {}

但我想在 1 个表达式中加入这些表达式

4

2 回答 2

1

您可以使用前瞻零宽度断言来检查以确保包含至少一个字母(或其他任何必需的字母)

^(?=.*[a-zA-Z])[0-9a-zA-Z-.]+$
于 2013-04-07T20:22:07.853 回答
0

假设您不想要前导、尾随或连续的点或连字符,我建议这种模式:

bool res = Regex.IsMatch(term, "^[a-z0-9]+(?>[-.][a-z0-9]+)*$", RegexOptions.IgnoreCase);

如果您想确保至少有一个字母,您可以将模式更改为:

^(?>[0-9]+(?>[-.][0-9]+)*[-.]?)?[a-z]+(?>[-.]?[a-z0-9]+)*$

演示

于 2013-04-07T20:45:40.537 回答