Regex 如果模式是abba,并且将给出一个字符串,那么如何匹配该模式;红蓝蓝”字样;哪一个符合模式

Regex 如果模式是abba,并且将给出一个字符串,那么如何匹配该模式;红蓝蓝”字样;哪一个符合模式,regex,string-matching,Regex,String Matching,昨天,我参加了一次校园巡回赛,要求解决这个问题。我没有接近这个问题的解决方案,我被拒绝了,现在我仍在尝试解决这个问题,但无法解决。我想知道如何解决这个问题。面试官说测试字符串中没有空格,而且是单个字符串 如果有输入字符串,则模式将为abba。 然后匹配模式将被删除 1) 猫猫 2) 红蓝 3) 诺耶斯诺 而不匹配的模式将被删除 1) 猫猫 2) 红蓝 3) 是的是的 (对不起,我的英语不好) 谢谢。如果您需要一个不使用特定词语的通用解决方案,这可能就是您想要的: (\w+)(\w+)\2\1

昨天,我参加了一次校园巡回赛,要求解决这个问题。我没有接近这个问题的解决方案,我被拒绝了,现在我仍在尝试解决这个问题,但无法解决。我想知道如何解决这个问题。面试官说测试字符串中没有空格,而且是单个字符串

如果有输入字符串,则模式将为abba。 然后匹配模式将被删除 1) 猫猫 2) 红蓝 3) 诺耶斯诺

而不匹配的模式将被删除 1) 猫猫 2) 红蓝 3) 是的是的

(对不起,我的英语不好)


谢谢。

如果您需要一个不使用特定词语的通用解决方案,这可能就是您想要的:

(\w+)(\w+)\2\1

这不是很有效,但它会尝试贪婪地匹配两个词组,然后使用来确保它们后面紧跟着第二个词组,然后是第一个词组

您可以使它更加通用,以匹配任何字符的两组(除换行符外):
(.+)(.+)\2\1

下面是使用C#解决整个问题的一个可能的解决方案:

私有布尔匹配器(字符串伪模式、字符串文本){
字符串regexpatern=“^”;
var uniqueParts=新列表();
foreach(伪模式.ToCharArray()中的字符部分)
if(唯一零件包含(零件)){
int backReference=uniqueParts.FindIndex(p=>p==part)+1;
regexpatern+=@“\”+反向引用;
}
否则{
唯一零件。添加(零件);
regexpatern+=@“(\w+”;
}
regexpatern+=“$”;
var regex=新的regex(regexpatern);
返回regex.Match(text.Success);
}

如果您需要一个不使用特定词语的通用解决方案,这可能就是您想要的:

(\w+)(\w+)\2\1

这不是很有效,但它会尝试贪婪地匹配两个词组,然后使用来确保它们后面紧跟着第二个词组,然后是第一个词组

您可以使它更加通用,以匹配任何字符的两组(除换行符外):
(.+)(.+)\2\1

下面是使用C#解决整个问题的一个可能的解决方案:

私有布尔匹配器(字符串伪模式、字符串文本){
字符串regexpatern=“^”;
var uniqueParts=新列表();
foreach(伪模式.ToCharArray()中的字符部分)
if(唯一零件包含(零件)){
int backReference=uniqueParts.FindIndex(p=>p==part)+1;
regexpatern+=@“\”+反向引用;
}
否则{
唯一零件。添加(零件);
regexpatern+=@“(\w+”;
}
regexpatern+=“$”;
var regex=新的regex(regexpatern);
返回regex.Match(text.Success);
}

但是有一个问题,面试官想要一个包含两个字符串的程序,第一个是pattern,第二个是testString。我们不能在正则表达式中这样做,因为每次执行时都有不同的输入模式。感谢you@TariqueShamim-是与此问题相关,还是与面试官的问题无关?这是实际问题。:-他想让我创建一个程序,用于检查多个模式和测试字符串。@Tariqueshamm-它使用的是什么语言?“abba”是输入模式的实际格式吗?还有其他一些例子吗?但有一个问题,面试官想要的程序包含两个字符串,第一个是pattern,第二个是testString。我们不能在正则表达式中这样做,因为每次执行时都有不同的输入模式。感谢you@TariqueShamim-是与此问题相关,还是与面试官的问题无关?这是实际问题。:-他想让我创建一个程序,用于检查多个模式和测试字符串。@Tariqueshamm-它使用的是什么语言?“abba”是输入模式的实际格式吗?还有其他的例子吗?