Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Помогите составить регулярку


Автор: geograph 16.9.2009, 22:43
Господа, помогите составить регулярное выражение. Нужно в тексте найти строку, длинной 8-9 символов, содержащую маленькие латинские буквы и цифры. Но, строка обязательно должна содержать и буквы, и цифры, т.е. если строка будет полностью из букв, то она не подходит.
Написал такую регулярку, надо подправить, чтобы подходила по условиям обозначенным выше:
[a-z0-9]{8,9}

Автор: Mabramyan 17.9.2009, 06:52
[([a-z0-9]*[a-z]+[a-z0-9]*[0-9]+[a-z0-9]*)([a-z0-9]*[0-9]+[a-z0-9]*[a-z]+[a-z0-9]*)]{8,9}

Автор: geograph 17.9.2009, 08:22
Хм.. смысл конструкции понятен, но почему-то не работает :(

Автор: Romikgy 17.9.2009, 23:50
в регулярных выражениях нет условного отрицания....
могу посоветовать сделать в 2 шага 
1. 
Цитата(geograph @  16.9.2009,  21:43 Найти цитируемый пост)
[a-z0-9]{8,9} 

2. 
выбросить из найденого все что найдет
\d{8,9}|[a-z]{8,9}

ну или перебрать все варинаты для 8 знаков а потом для 9

Автор: AntonN 18.9.2009, 23:11
пум-пурум..
http://forum.sources.ru/index.php?showtopic=282282&view=findpost&p=2369704
вроде бы работает

Автор: Romikgy 18.9.2009, 23:20
и ловит все...
даже 123456789 такое...

Автор: Romikgy 18.9.2009, 23:59
так у мя правильно работает (вроде)
Код

procedure GetSlovoList(Str: String; LB: tstrings);
var RE,r2: TRegExpr;
    Ulist: TStrings;
    i: Integer;
begin
RE:=TRegExpr.Create;
r2:=TRegExpr.Create;
 try
  r2.ModifierG:=r.ModifierG;   
    re.Expression:='[a-z0-9]{8,9}';
    if re.Exec(Str) then
    repeat
      case Length(re.Match[0]) of
      8: begin
            r2.Expression:='[a-z]{8}|[0-9]{8}';
           if not r2.Exec(re.Match[0]) then
            lb.Add(  nil ,re.Match[0] );
         end;
      9: begin
            r2.Expression:='[a-z]{9}|[0-9]{9}';
           if not r2.Exec(re.Match[0]) then
            lb.Add(  nil ,re.Match[0] );
         end;
      end;
    until not re.ExecNext;
 finally
  RE.Free;
  r2.Free; 
 end;
end;

Автор: AntonN 19.9.2009, 00:02
Romikgy, 
Цитата

даже 123456789 такое... 

оно и у меня ловит, тока ему нужны слова и с цифрами и с буквами smile
вот тока я сам забыл сделать, чтобы и цифры обязательно были smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)