是否可以创建一个匹配所有五个a和五个b的字符串的正则表达式?
像aaaaabbbbb或ababababab或aabbaabbab。
我认为确定性引擎需要多项式时间。
是否有其他匹配的语言可以实现这种匹配?
更新:
我想使用这种表达式进行搜索,所以我将目的改为(?=b*ab*){5}(?=a*ba*){5}([ab]{10})
并且效果很好! :)
我仍然不确定这样表达的表现。但我想我可以只查看前瞻性表达。
我仍然很好奇哪些其他类型的模式很容易解释但很难正则表达式?
答案 0 :(得分:6)
我有这些螺丝。要把它们钉在这块木头上,我应该用爪子还是圆头锤?
那是(大致)你的问题所要求的。你应该做的只是循环遍历字符串的每个字符。我可以用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;
}
你可以将它转换为你选择的语言,b)修改它以匹配'a'和'b'的连续序列(如果你愿意)或者根据你的其他特定要求进行调整。
基本的一点是,这个工作有比正则表达式更好的工具,所以除非“a”和“b”代表更复杂的正则表达式,否则不要使用正则表达式。即使“a”和“b”真的是更复杂的正则表达式,你也不必用One Regex来解决所有问题。您可以将一些有用的正则表达式和一个代码循环(如上所述)混合使用,而不是一个巨大的(并且不可维护的)Regex-zilla。
答案 1 :(得分:5)
您可以使用lookahead assertions:
^(?=(?:[^a]*a){5}[^a]*$)(?=(?:[^b]*b){5}[^b]*$)