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


Автор: KaKTyCc 24.5.2006, 21:08
Извиняюсь что не в том форуме запостил, но другого выхода нет  smile 

Код

 TRegExpr *r2 = new TRegExpr;
  r2->ModifierR = true;
      r2->Expression = "mailto=+([а-Я\\+]*)";
      if(r2->Exec(fMain->Memo1->Text))
       {
         String s =  r2->Match[1];   // s принимает значение NULL почему то после выполнения условия
       }
  
     r2->Free();


Слово из русских букв находит, но почему то не присваивается строке  smile 
 

Автор: Albinos_x 24.5.2006, 21:27
мда... разделом промахнулся....
http://forum.vingrad.ru/index.php?showforum=94

что есть TRegExpr? 

Автор: Yanis 24.5.2006, 21:45
Цитата(Albinos_x @  24.5.2006,  22:27 Найти цитируемый пост)
что есть TRegExpr? 

http://regexpstudio.com/RU/TRegExpr/TRegExpr.html  smile 

Автор: KaKTyCc 24.5.2006, 21:46
Albinos_x,  да там не знает никто

TRegExpr регулярные выражения, писана библиотека под Делфи, но использовать можно и в Билдере
 

Автор: Yanis 24.5.2006, 21:57
А ты бряк на эту строку ставил? Вообще условие то выполняется? 

Автор: Albinos_x 24.5.2006, 22:14
Цитата(Yanis @  24.5.2006,  21:45 Найти цитируемый пост)
http://regexpstudio.com/RU/TRegExpr/TRegExpr.html   

у меня одни иероглифы... smile 
 

Автор: Yanis 24.5.2006, 22:19
Цитата(Albinos_x @  24.5.2006,  23:14 Найти цитируемый пост)
у меня одни иероглифы... 

 smile У меня тоже smile Кодировку то смени smile 

Автор: KaKTyCc 24.5.2006, 22:25
Цитата(Yanis @  24.5.2006,  21:57 Найти цитируемый пост)
Вообще условие то выполняется? 



В том то и дело что выполняется  smile  но не присваивается ничерта  smile  

Автор: Albinos_x 24.5.2006, 22:28
может стоит попробовать тип данных другой взять....
например widestring или ansistring... 

Автор: Yanis 24.5.2006, 22:28
Цитата(KaKTyCc @  24.5.2006,  22:08 Найти цитируемый пост)
String s =  r2->Match[1]; 

А индекс случайно не от 0 начинается? Мне кажется всё таки надо так:
Код
String s =  r2->Match[0];
  

Автор: KaKTyCc 24.5.2006, 23:45
Цитата(Yanis @  24.5.2006,  22:28 Найти цитируемый пост)
А индекс случайно не от 0 начинается? Мне кажется всё таки надо так:


на 0, это если все выражание, если я поставлю 0, то в s будет mailto=Yanis
а если 1, то вернет именно то что в скобках, тоесть просто Yanis
так вот имена с англ буквами возвращает, а с русскими либо mailto=
а если 1 то ничиго  smile   

Автор: KaKTyCc 25.5.2006, 00:01
 smile  smile  smile  

Автор: Albinos_x 25.5.2006, 00:21
а с английскими таких проблем не возникает? 

Автор: KaKTyCc 25.5.2006, 00:24
Albinos_x,  в том то и дело, если ищется  mailto=adsadsafa
то  r2->Match[1] возвращает adsadsafa
а если mailto=выпавпыв
то это строка тоже находится, но возвращается пустота  smile 
а если указать r2->Match[0] то возвращается только mailto= и все  smile  

Автор: Albinos_x 25.5.2006, 05:19
библиотека с исходниками? 

Автор: Yanis 25.5.2006, 08:11
Цитата(Albinos_x @  25.5.2006,  06:19 Найти цитируемый пост)
библиотека с исходниками? 
Конечно. Очень толковая библиотека. Советую скачать. 

Автор: BUGOR 25.5.2006, 08:44
Всё потому что выражение составлено неверно. Убери символ * и всё должно получится. 

Автор: KaKTyCc 25.5.2006, 10:16
Цитата(BUGOR @  25.5.2006,  08:44 Найти цитируемый пост)
Всё потому что выражение составлено неверно. Убери символ * и всё должно получится.  

Нет, все правильно, без * будет находить только 1 символ 

Автор: KaKTyCc 25.5.2006, 13:18
и тут никто не знает  smile  

Автор: BUGOR 25.5.2006, 14:19
Спецсимвол "+" означает в твоё случае что символ "=" может повторятся один или более раз,  потому как он стоит после равно, на скобки он не распространяется, в тоже время спецсимвол "*" позволяет быть пустоте в скобках, потому как "*" значит от 0 до скольки угодно раз(т.е. его может и не быть), поэтому тебе и возвращается пустота, потому как она подходит под условия, отсюда вывод, что твоё выражение надо переделать(ну по крайней мере я бы переделалsmile):

mailto=([a-zA-Z]+){1}\b

Читаю выражение, если непонятно:

Ищем строку, где сначала идёт последовательность "mailto=" после чего 1 или более любых символов английского алфавита(кстати вместо класса можно использовать \w), и вся эта последовательность символов не может повторяться более одного раза и после этого должен следовать конец слова(пробел, табуляция, перенос строки, конец строки). 

Хотя выражение неуниверсально, но на мой взгляд более верно

  

Автор: KaKTyCc 25.5.2006, 14:41
BUGOR, да, тут соглашусь, но а что с русскими буквами делать, если например ищется
mailto=_блаблабла_  то возвращает только _   

Автор: BUGOR 25.5.2006, 16:19
KaKTyCc, я не встречал мыл которые пишутся по-русски smile  

Автор: KaKTyCc 25.5.2006, 16:23
BUGOR, это уже второй вопрос, тут не эмэйлы,  имена пользователей, внутренняя почта

ну так как мне быть с русскими именами smile
 

Автор: BUGOR 25.5.2006, 16:27
Сейчас вот проверил... в пхп работают, а в ВБ нет... что делать... искать другую библиотеку наверное или дописывать эту. Ибо тут просто нет поддрежки русских символов, что тут сделаешь... 

Автор: KaKTyCc 25.5.2006, 16:36
BUGOR,  в том то и дело что есть поддержка

http://regexpstudio.com/Downloads/TestRExp.zip

вот программка которая демонстрирует все возможности библиотеки 

Автор: AriX 25.5.2006, 17:17
Попробуй диапазон а-Я поменять на а-яА-Я 

Автор: KaKTyCc 25.5.2006, 18:18
AriX,  тоже самое  smile  

Автор: AriX 25.5.2006, 19:18
А
^mailto=(.*)$
не покатит? 

Автор: KaKTyCc 25.5.2006, 19:36
%D1%EB%E2%ED \" style .....

короче буранул я немного smile все работает, просто я не посмотрел как следует

Добавлено @ 19:48 
всем спасибо, вопрос решен, библиотека супер 

Автор: Yanis 26.5.2006, 08:42
Ну что же ты так... Я даже расстроился немного. 

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