打印字符串无效的正则表达式模式
Print the regex pattern where the string becomes invalid
给定正则表达式
^(aa|bb){1}(a*)(ab){1}$
对于语言,
All strings starting with double letters and ends with substring ab
我想知道是否可以打印字符串无效的正则表达式代码。这与有限自动机中的正则表达式有关。
例如,我有以下这些无效字符串输入集,
abaa
aabb
aaba
我想要这样的输出,
abaa ^(aa|bb){1}
aabb ^(aa|bb){1}(a*)
aaba ^(aa|bb){1}(a*)(ab){1}$
您可以从字符串创建正则表达式,如果它是格式错误的模式,它将抛出异常。您可以创建一个循环,该循环将获取模式的子字符串并尝试创建一个正则表达式,如果失败则继续。
有了正则表达式后,您就可以测试匹配项并存储与输入匹配的最后一个模式。所以它会是这样的:
public static string FindBestValidRegex(string input, string pattern)
{
var lastMatch = "";
for (int i = 0; i < pattern.Length; i++)
{
try
{
var partialPattern = pattern.Substring(0, i + 1);
var regex = new Regex(partialPattern);
if (regex.IsMatch(input))
{
lastMatch = partialPattern;
}
}
catch { }
}
return lastMatch;
}
测试:
static void Main(string[] args)
{
var pattern = @"^(aa|bb){1}(a*)(ab){1}$";
Console.WriteLine(FindBestValidRegex("bbb", pattern));
Console.WriteLine(FindBestValidRegex("aabb", pattern));
Console.WriteLine(FindBestValidRegex("aaab", pattern));
Console.WriteLine(FindBestValidRegex("bbaab", pattern));
Console.ReadKey();
}
输出:
^(aa|bb){1}(a*)
^(aa|bb){1}(a*)
^(aa|bb){1}(a*)(ab){1}$
^(aa|bb){1}(a*)(ab){1}$
给定正则表达式
^(aa|bb){1}(a*)(ab){1}$
对于语言,
All strings starting with double letters and ends with substring ab
我想知道是否可以打印字符串无效的正则表达式代码。这与有限自动机中的正则表达式有关。
例如,我有以下这些无效字符串输入集,
abaa
aabb
aaba
我想要这样的输出,
abaa ^(aa|bb){1}
aabb ^(aa|bb){1}(a*)
aaba ^(aa|bb){1}(a*)(ab){1}$
您可以从字符串创建正则表达式,如果它是格式错误的模式,它将抛出异常。您可以创建一个循环,该循环将获取模式的子字符串并尝试创建一个正则表达式,如果失败则继续。
有了正则表达式后,您就可以测试匹配项并存储与输入匹配的最后一个模式。所以它会是这样的:
public static string FindBestValidRegex(string input, string pattern)
{
var lastMatch = "";
for (int i = 0; i < pattern.Length; i++)
{
try
{
var partialPattern = pattern.Substring(0, i + 1);
var regex = new Regex(partialPattern);
if (regex.IsMatch(input))
{
lastMatch = partialPattern;
}
}
catch { }
}
return lastMatch;
}
测试:
static void Main(string[] args)
{
var pattern = @"^(aa|bb){1}(a*)(ab){1}$";
Console.WriteLine(FindBestValidRegex("bbb", pattern));
Console.WriteLine(FindBestValidRegex("aabb", pattern));
Console.WriteLine(FindBestValidRegex("aaab", pattern));
Console.WriteLine(FindBestValidRegex("bbaab", pattern));
Console.ReadKey();
}
输出:
^(aa|bb){1}(a*)
^(aa|bb){1}(a*)
^(aa|bb){1}(a*)(ab){1}$
^(aa|bb){1}(a*)(ab){1}$