как работают Регулярные выражения

Тема в разделе "WASM.BEGINNERS", создана пользователем GGCom, 9 янв 2010.

  1. GGCom

    GGCom New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2010
    Сообщения:
    7
    Здравствуйте Уважаемые форумчане.

    Если не трудно, может кто объяснить в краце как работают регулярные выражения,и помогут ли мне они в решении моей задачи

    Всё дело в том ,что есть некоторая стока типа (3,"Name","ColorName","OldName",15,size) из которой нужно выцепить значения без скобок,кавычек,и запятых ...Решал как то эту проблему на BCB 6 с помощью класса TList , а сейчас хотелось бы решить тоже самое но на ASM

    Если есть у кого нибудь мысли или советы по этой теме буду очень признателен.
    Спасибо за внимание.
     
  2. GGCom

    GGCom New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2010
    Сообщения:
    7
    Простите,имелось в виду не как использовать а ка вообще работает поиск по шаблону , посимвольно или кусками.
     
  3. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    слишком простая задача, чтобы задействовать regexp.
     
  4. GGCom

    GGCom New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2010
    Сообщения:
    7
    По поводу RegEXP разобрались,а как бы в решили подобную задачу ? с помощью поиска и замены разделительных знаков ?
     
  5. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    как по мне,алгос примерно такой
    сначало вытягиваем строки между запятыми: сохр.позицию первого символа запятой(start),далее передвигаемся по строке до следущего символа,запоминаем позицию(last) вызываем lstrcpyn(buf,str+start,last-start+1), и так далее, только уже ищем с позиции start=start+last ..
    а скобки можно вообще потом тупо удалить :)
     
  6. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    зы. если не знаешь как реализовать на асме, то сделай кодес ЯВУ, после чего под дебагером глянь как все устроено))
     
  7. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    та боже, перебираем символы, как только находим букву-цифру это старт, находим разделитель(кавычка,запятая)это конец. делаем alloc(end-start+1). копируем туда данные. и так до конца. учитывая что формат и все остальное заранее известны, это элементарно.
    блин ребята зачем вы вообще начинаете заниматся програмингом если вам лень придумать алгоритм для решения такой примитивной задачи? неужели не интересно сделать это самому?
     
  8. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Ме-е-е-дленно.
     
  9. GGCom

    GGCom New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2010
    Сообщения:
    7
    Да почему не интересно, просто хотел узнать как бы решили эту задачу другие люди...ведь все познаётся в сравнении... у меня решение такое :

    Задать некий шаблон типа " (s,"s",s,s,s,"s") " где s означает взять слово.
    А потом просто перебираем строку одновремено сравнивая с шаблоном на С++ это выглядело бы так,функция корявая ибо на скорую руку накавырял...

    Код (Text):
    1. int  __fastcall TForm1::AnalysisLine(String sTemplate,String sBuff)
    2. { enum {read,take}tmode;
    3.   int sLength=sBuff.Length(),itakeNum=0;
    4.   int iTemplLength=sTemplate.Length();String Lex;
    5.   for(int i=1,itmpNum=1;i<=sLength;i++)
    6.   {   if(sBuff[i]==sTemplate[itmpNum])
    7.       {  if(tmode==take)
    8.          {  if(itakeNum<scriptMAXIMUM)
    9.             {  alArrayCommands[itakeNum]=Lex.Trim();
    10.                itakeNum++;
    11.             }tmode=read;Lex="";
    12.          }
    13.          if(itmpNum<iTemplLength)itmpNum++;
    14.          if(sTemplate[itmpNum]=='s')
    15.          {  tmode=take;itmpNum++;
    16.          }
    17.       }else if(tmode==take)Lex+=sBuff[i];
    18.   }return(itakeNum);
    19. }//----------------------------------------------------------------------------
    В итоге мы имеем только то что нужно,без всякого мусора типа разделительных знаков.
    P.S. Дело в том что шаблонов будет много и они разные... вот и хотел узнать кто и что мог предложить по этому поводу.
     
  10. keYMax

    keYMax New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2003
    Сообщения:
    276
    Адрес:
    Новоуральск
    Есть хорошая програмка RegexCoach. В частности в ней можно писать регулярные выражения (естественно нужно знать теорию) и там же она обрабатывает их в релтайме. Дополнительно показывает дерево разбора регулярного выражения. Возможно поможет подсмотреть как оно срабатывает на сравниваемой строке изнутри.
     
  11. GGCom

    GGCom New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2010
    Сообщения:
    7
    Спасибо,пойду смотреть !
     
  12. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Просто такая задача - это азбука и даже в новичках ее стыдно задавать. Можно только в "для лабораторных работ".... А шаблон - это из пушки по воробьям. Алгоритм решения твоей задачи действительно заложен в regexp, но полезнее раскопать реализацию regexp, чем готовеньким решать несвойственную задачу.
     
  13. GGCom

    GGCom New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2010
    Сообщения:
    7
    Ну алгоритм надо ещё "раскапать" + разобраться в нем,и сделать свою версию.

    А RegExp это вроде как из ядерного орудия по воробьям ! =)

    Мне кажется затея с шаблонами достаточно гибкая для моих задач,посмотрим в общем,если не найду реализацию RegExp то придется мутить с шаблонами
    Спасибо за внимание.
     
  14. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    GGCom
    тема про регекспы поднимается достаточно часто. и уже в который раз ссылю страничку посвященную небольшим алгосам и достаточно простой имплементации регехпов из п9.

    если вам тяжело житать на ене, то у нас тут есть критик один, прекрасно знающий ен и обожающий критиковать чужие переводы.
    он, думается, желает осчасливить страждущих нееноязычных безукоризненным переводом от себя. попросите его. авось снизойдет до вас со своего критического олимпа.
     
  15. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    вообщето либ много. например "pcre".
     
  16. GGCom

    GGCom New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2010
    Сообщения:
    7
    Большое спасибо за ссылку!