是否可以创建一个正则表达式来匹配所有带有五个 a 和五个 b 的字符串?
就像 aaaaabbbbb 或 ababababab 或 aabbaabbab。
我想确定性引擎需要多项式时间。
是否有其他匹配语言可以实现这种匹配?
更新:
我想用那种表达方式进行搜索,所以我把目的换成了(?=b*ab*){5}(?=a*ba*){5}([ab]{10}),效果很好!:) 对于这样的表达方式,我仍然不确定。但我想我只能查找前瞻表达式。
我仍然很好奇还有哪些其他类型的模式,易于解释但难以正则表达式?
是否可以创建一个正则表达式来匹配所有带有五个 a 和五个 b 的字符串?
就像 aaaaabbbbb 或 ababababab 或 aabbaabbab。
我想确定性引擎需要多项式时间。
是否有其他匹配语言可以实现这种匹配?
更新:
我想用那种表达方式进行搜索,所以我把目的换成了(?=b*ab*){5}(?=a*ba*){5}([ab]{10}),效果很好!:) 对于这样的表达方式,我仍然不确定。但我想我只能查找前瞻表达式。
我仍然很好奇还有哪些其他类型的模式,易于解释但难以正则表达式?
我有所有这些螺丝。要将它们锤入这块木头,我应该使用爪形锤还是球头锤?
这(大致)是您的问题所要问的。您应该做的只是遍历字符串的每个字符。我可以在 C 中做到这一点。观看:
int validate(char *s)
{
int a = 0, a = 0;
while(*s)
{
switch(*s++)
{
case 'a':
a++;
break;
case 'b':
b++;
break;
}
}
return a == 5 && b == 5;
}
它留给您作为练习 a) 将其转换为您选择的语言,b) 修改它以仅匹配 'a's 和 'b's 的连续序列(如果您愿意)或根据您的其他特定要求对其进行调整。
基本的一点是这个工作有比正则表达式更好的工具,所以除非“a”和“b”是更复杂的正则表达式的替代品,否则不要为此使用正则表达式。即使“a”和“b”确实是更复杂的正则表达式,您也不必使用一个正则表达式来解决所有问题来统治它们。您可以混合一些有用的正则表达式和一个代码循环(如上面的),以产生比巨大(且不可维护)的 Regex-zilla 更大的效果。
您可以使用前瞻断言:
^(?=(?:[^a]*a){5}[^a]*$)(?=(?:[^b]*b){5}[^b]*$)