是否有可能从一系列输入中生成正则表达式?
我不确定这是否可能。因此我在这里发布这个问题。
是否有任何工具或网站可以做到这一点?
更多更新:说我输入像
- www.google.com
- google.com
- http://www.google.com
它应该以某种方式给我一个正则表达式 dat 接受这种类型的输入......这可能吗?
是否有可能从一系列输入中生成正则表达式?
我不确定这是否可能。因此我在这里发布这个问题。
是否有任何工具或网站可以做到这一点?
更多更新:说我输入像
它应该以某种方式给我一个正则表达式 dat 接受这种类型的输入......这可能吗?
对于您的 URL 示例,这是我刚刚在 C# 中拼凑的内容。我想它会帮助你。
// Input "pattern" should consist of a string with ONLY the following tags:
// <protocol> <web> <website> <DomainExtension> <RestOfPath>
// Ex) GenerateRegexFor("<protocol><web><webite><domainextension>") will match http://www.google.com
public string GenerateRegexFor(string pattern)
{
string regex = ProcessNextPart(pattern, "");
return regex;
}
public string ProcessNextPart(string pattern, string regex)
{
pattern = pattern.ToLower();
if (pattern.ToLower().StartsWith("<protocol>"))
{
regex += @"[a-zA-Z]+://";
pattern = pattern.Replace("<protocol>", "");
}
else if (pattern.ToLower().StartsWith("<web>"))
{
regex += @"www\d?"; //\d? in case of www2
pattern = pattern = pattern.Replace("<web>", "");
}
else if (pattern.ToLower().StartsWith("<website>"))
{
regex += @"([a-zA-Z0-9\-]*\.)+";
pattern = pattern.Replace("<website>", "");
}
else if (pattern.ToLower().StartsWith("<domainextension>"))
{
regex += "[a-zA-Z]{2,}";
pattern = pattern.Replace("<domainextension>", "");
}
else if (pattern.ToLower().StartsWith("<restofpath>"))
{
regex += @"(/[a-zA-Z0-9\-]*)*(\.[a-zA-Z]*/?)?";
pattern = pattern.Replace("<restofpath>", "");
}
if (pattern.Length > 0 && pattern != "")
return ProcessNextPart(pattern, regex);
return regex;
}
根据您想要匹配的 URL 样式,我认为这应该匹配几乎所有内容。如果有与 URL 相似但不是 URL 的文本,您可能希望使其更加挑剔。
你会这样使用它:
//to match something like "www.google.com/images/whatever"
// \
// \ |www||.google.||----com------||/images/whatever
// \ | | | |
// \/ V V V V
string regex = GenerateRegexFor("<web><website><domainextension><restofpath>");
//to match something like "http://www.google.com/images/whatever"
string regex = GenerateRegexFor("<protocol><web><website><domainextension><restofpath>");
您可以按任何顺序使用这些标签中的任何一个(尽管其中一些没有多大意义)。也可以随意在此基础上进行构建。您可以添加任意数量的标签来表示任意数量的模式。
哦,还有 +1 让我在工作中做点事情。