char *pattern = "^aaa.*aaa$";
char *str = "aaajshfsdoiuaadfhdjaaa";
pcre *re;
int options = 0; //PCRE_ANCHORED;
const char *error;
int erroffset;
re = pcre_compile (pattern, options, &error, &erroffset, NULL);
if(!re)
{
Edit2->Text = "failed";
}
else
{
int count = 0;
int ovector[30];
count = pcre_exec (re, NULL, (char *)str, strlen(str), 0, ovector, 30);
if (!count)
{
Edit2->Text = "bad";
}
else
{
Edit2->Text = count;
for (int c = 0; c < 2 * count; c += 2)
{
if(ovector[c] < 0)
{
Memo1->Lines->Append("fuck");
}
else
{
Memo1->Lines->Append(ovector[c]);
Memo1->Lines->Append("/");
Memo1->Lines->Append(ovector[c+1]);
}
}
}
}
Регулярные выражения. Builder6.
Почему-то не работают
^ - начало строки
$ - конец строки
Например, мне нужно проверить, что строка "aaajshfsdoiuaadfhdjaaa"
начинается с "aaa" и заканчивается на "aaa". Такой вид строки можно описать таким рег.выр-м ^aaa.*aaa$. Но, почему-то функция pcre_exec не возвращает совпадений. Уже перевел всю доку по этим функциям. Использую их так, как там и написано.
Вот мой код.
Код:
P.S.: Пробовал и /^aaa.*aaa$/. Тоже не работает. :confused:
Код:
if (!count)
Правильно будет
Код:
if (count<0)
Скорее проблема у меня на компе, т.к. запустил заново все заработало.
Мистика.:eek:
И всё же, всё же: функция pcre_exec в случае ошибки возвращает отрицательные значения. Ноль будет означать, если не ошибаюсь (сейчас под рукой нет этой библиотеки), что шаблону соответствует вся строка целиком.
неа, это не так