我希望你的帮助为此创建一个正则表达式,我无法找到完成它的逻辑,我对正则表达式几乎一无所知。
正则表达式应该接受这些字符串(包含一对数量的“a”):
aba (2)
aa (2)
ababababaa (6)
aabbaba (4)
...
否定:
bb (0)
aaa (3)
bab (1)
aabbabaa (5)
bbbbbbbaaaaaaabababb (9)
...
非常感谢任何帮助,谢谢。
答案 0 :(得分:0)
你可以形成正则表达式,确保你有2 a
个字符,并为每个组合组合多个正则表达式(只要它允许non-a
字符)
$ sed -n -r '/^(a[^a]?a|[^a]?aa|aa[^a]?|[^a]a[^a]a|a[^a]a[^a]|[^a]a[^a]a[^a])+$/ p'
aba
aba
aa
aa
ababababaa
ababababaa
aabbaba
aabbaba
bb
aaa
bab
aabbabaa
bbbbbbbaaaaaaabababb
$
因此,正则regex确保您在字符串中拥有偶数a
个字符。
注意:符合条件的行打印两次,而不打印一次。而不是[^a]
,您只能使用b
。
答案 1 :(得分:0)
逻辑可以简单:
a
[^a]*(a[^a]*a[^a]*)+
与任意非{{1}}
正则表达式:
{{1}}
注释:
[^a]* # Match arbitrary length non-a (a[^a]*a[^a]*) # Match a pair of a with anything in between and after + # Repeat the previous with at least one occurrence
答案 2 :(得分:0)
优化
var r= "aaaaabbabbbbaa".match(/(.)\1{0,}/g);
var count=0;
var startCharMustBe='a';
for (i = 0; i < r.length; i++) {
if(r[i].length>0 && r[i][0]==startCharMustBe)
{
count=count+r[i].length;
}
}
alert(count);
<强>动态强>
var r= "aaaaabbbbbbaa".match(/(.)\1{0,}/g);
var index=new Array();
var isExist=false;
var startChar;
for (i = 0; i < r.length; i++) {
startChar='';
isExist=false;
if(r[i].length>0)
{
startChar=r[i][0];
}
for(ii=0;ii<index.length;ii++)
{
if(startChar==index[ii].C)
{
index[ii].length=index[ii].length+r[i].length;
isExist=true;
break;
}
}
if(!isExist)
{
var t= {"C":startChar,"length":r[i].length};
index.push(t);
}
}
for(ii=0;ii<index.length;ii++)
{
alert(index[ii].C +" "+index[ii].length);
}
alert(r);