2016-03-03 4 views
1

Мне нужна ваша помощь в создании регулярного выражения для этого, я просто не могу найти логику, чтобы ее реализовать, я почти ничего не знаю о регулярных выражения.Сопоставьте только строки, содержащие пары/степени 2 данного символа, с использованием регулярного выражения

Регулярное выражение должно принимать строки, как эти из них (содержащего количество пара «а»):

aba (2) 
aa (2) 
ababababaa (6) 
aabbaba (4) 
... 

И отрицать:

bb (0) 
aaa (3) 
bab (1) 
aabbabaa (5) 
bbbbbbbaaaaaaabababb (9) 
... 

Любой помощь будет очень признательна, спасибо ,

ответ

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 
$ 

Так выше регулярное выражение гарантирует, вы даже номер a символы в строке.

Примечание: в зависимости от того, какие строки соответствуют вашим критериям, печатаются дважды и которые не печатаются только один раз. Вместо [^a] вы можете использовать только b.

0

Логика может быть столь же просто, как:

  1. Match произвольной длины не- a от начала
  2. матча пара a с произвольным не- a между ними и после
  3. Repeat (2) на неопределенный срок, по меньшей мере, один

регулярное выражение:

[^a]*(a[^a]*a[^a]*)+

Аннотированный:

 
[^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 
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); 

Dynamic

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); 

 Смежные вопросы

  • Нет связанных вопросов^_^