int wildcmp(const char *wild, const char *string) {
// Written by Jack Handy - jakkhandy@hotmail.com
const char *cp = NULL, *mp = NULL;
while ((*string) && (*wild != '*')) {
if ((*wild != *string) && (*wild != '?')) {
return 0;
}
wild++;
string++;
}
while (*string) {
if (*wild == '*') {
if (!*++wild) {
return 1;
}
mp = wild;
cp = string+1;
} else if ((*wild == *string) || (*wild == '?')) {
wild++;
string++;
} else {
wild = mp;
string = cp++;
}
}
while (*wild == '*') {
wild++;
}
return !*wild;
}
Как сравнить две строки
Например: ~exe --- ~* верно
Nb?? --- Nber верно
Nb?? --- Nberyt неверно
Посмотри вот это:
Про регулярные выражения ченибудь слышал? )
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-xxx.tar.gz
PCRE (Perl-compatible regular expression library)
И велосипед изобретать не надо... :)
PCRE (Perl-compatible regular expression library)
И велосипед изобретать не надо... :)
BOOST рулит :)) там и регэкспы.. и вообще, много всего, что жизнь упрощает ;)
б/п ))
Например krot.h~j = k???.?~? или *.txt = mmm.txt=vbfg.txt или 1*.txt = 1234.txt = 1.txt = 12.txt
Код:
#include <pcre.h>
char pattern[] = "krot.h~j";
char str[] = "k???.?~?";
pcre *re;
int options = 0;
const char *error;
int erroq;
re = pcre_compile ((char *) pattern, options, &error, &erroq, NULL);
if (!re){
MessageBox(Form1->Handle,"Ошибка","Ошибка",MB_ICONSTOP+MB_OK+MB_SYSTEMMODAL);
}
else{
int count = 0;
int ovector[30];
count = pcre_exec (re, NULL, (char *) str, strlen(str), 0, ovector, 30);
if (!count){
MessageBox(Form1->Handle,"Нет совпадений","Ошибка",MB_ICONSTOP+MB_OK+MB_SYSTEMMODAL);
}
else{
for (int c = 0; c < 2 * count; c += 2){
if (ovector[c] < 0){
MessageBox(Form1->Handle,"Нет совпадений1111","Ошибка",MB_ICONSTOP+MB_OK+MB_SYSTEMMODAL);
}
else{
MessageBox(Form1->Handle,("Совпадение"+IntToStr(ovector[c])+" "+ IntToStr(ovector[c + 1])).c_str(),"Ошибка",MB_ICONSTOP+MB_OK+MB_SYSTEMMODAL);
}
}
}
}
char pattern[] = "krot.h~j";
char str[] = "k???.?~?";
pcre *re;
int options = 0;
const char *error;
int erroq;
re = pcre_compile ((char *) pattern, options, &error, &erroq, NULL);
if (!re){
MessageBox(Form1->Handle,"Ошибка","Ошибка",MB_ICONSTOP+MB_OK+MB_SYSTEMMODAL);
}
else{
int count = 0;
int ovector[30];
count = pcre_exec (re, NULL, (char *) str, strlen(str), 0, ovector, 30);
if (!count){
MessageBox(Form1->Handle,"Нет совпадений","Ошибка",MB_ICONSTOP+MB_OK+MB_SYSTEMMODAL);
}
else{
for (int c = 0; c < 2 * count; c += 2){
if (ovector[c] < 0){
MessageBox(Form1->Handle,"Нет совпадений1111","Ошибка",MB_ICONSTOP+MB_OK+MB_SYSTEMMODAL);
}
else{
MessageBox(Form1->Handle,("Совпадение"+IntToStr(ovector[c])+" "+ IntToStr(ovector[c + 1])).c_str(),"Ошибка",MB_ICONSTOP+MB_OK+MB_SYSTEMMODAL);
}
}
}
}
[^\.]\.txt
1[^\.]\.txt
Уважаемый, а где можно почитать как строить эти запросы для С++. Порыл в инете, ничего вразумительного толком не нашел. Может какая инфа есть.
Цитата: YanMin
Тень Пса
Уважаемый, а где можно почитать как строить эти запросы для С++. Порыл в инете, ничего вразумительного толком не нашел. Может какая инфа есть.
Уважаемый, а где можно почитать как строить эти запросы для С++. Порыл в инете, ничего вразумительного толком не нашел. Может какая инфа есть.
В мане по PHP :D . Ищущий да обрящет ;)
YanMin
Можешь скачать - собственно классика по построению и синтаксису регулярных выражений:
http://www.softtime.ru/info/fridl.php?down=fridl.djvu
Как конккретно заюзать регулярные выражения в C++ зависит от либы которая предоставляет эту функциональность. В boost есть хорошая поддержка регэкспов, если пишешь под винду исспользуюя ATL можно восспользоваться ATL-ной библиотекой регэкспов, ну и собственно полно еще реализаций.
Цитата: YanMin
Тень Пса
Уважаемый, а где можно почитать как строить эти запросы для С++. Порыл в инете, ничего вразумительного толком не нашел. Может какая инфа есть.
Уважаемый, а где можно почитать как строить эти запросы для С++. Порыл в инете, ничего вразумительного толком не нашел. Может какая инфа есть.
BOOST.REGEX, поддерживает регулярные выражения like: Perl, POSIX extended и POSIX basic.
можешь почитать у них на сайте. http://www.boost.org/libs/regex/doc/syntax.html
Цитата: aks
Да причем тут ман по ПХП. Что челоеку чтобы почитать теорию по регэкспам впринципе никак не зависящим от языков программирования нада PHP ставить?
Нет. Просто, имхо, это там изложено на русском языке и вполне человеческим языком.
----
1. Разработать свой язык (ну расписать что к чему ~,?,+,! и т.д.)
2. Разработать модель конечного афтомата позволяющего решать подобную задачу.