我正在尝试使用正则表达式验证器。诀窍是它可能需要更多的逻辑,但我希望我可以只用正则表达式来完成这个。因此,如果要测试的字符串以@faxmail.com 结尾,那么它也必须以“1”开头。否则,基本上任何不以 @faxmail.com 结尾的都是匹配项。因此,如果我仅使用 C# 执行此操作,它可能看起来像
if(someString.EndsWith("@faxmail.com"))
{
if(!someString.StartsWith("1,")) return false;
} else {
return true;
}
我试过类似 (?(?=^(\w+)@faxmail.com$)(^1)))
的东西,它部分起作用了。最后我需要这样的东西:
1,test@faxmail.com (passes)
fail@faxmail.com (fails)
test@testmail.com (passes)
我尝试用正则表达式实现的目标是可能的,还是我只需要平底船并使用 C# 逻辑?
最佳答案
你可以试试这个正则表达式:
Regex regex = new Regex(@"^1.*(@faxmail.com)$|.*(?<!@faxmail.com)$");
这里有两个正则表达式要匹配:
- 以 1 开头,后跟任意字符,以“@faxmail.com”结尾,或者
- 任何不以“@faxmail.com”结尾的字符串
您可以使用下面的测试用例来验证:
Regex regex = new Regex(@"^1.*(@faxmail.com)$|.*(?<!@faxmail.com)$");
Console.WriteLine(regex.IsMatch("1,test@faxmail.com")); //True
Console.WriteLine(regex.IsMatch("fail@faxmail.com")); //False
Console.WriteLine(regex.IsMatch("test@testmail.com")); //True
Console.WriteLine(regex.IsMatch("faxmail@faxmail.com@testmail.com")); //True
Console.WriteLine(regex.IsMatch("2,test@faxmail.com")); //False
关于c# - 复杂的正则表达式验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42381735/