int str_valid(const char* s)
{
unsigned u;
int n, cnt = 0, r;
while (1) {
r = sscanf(s, "%u%n", &u, &n);
if (r == 0 || r == EOF)
return 0;
if (u < 5 || u > 200)
return 0;
cnt++;
s += n;
if (cnt == 24)
if (*s == '\0')
return 1;
else
return 0;
if (*s != ',')
return 0;
s++;
}
}
Здравствуйте, _agg, Вы писали:
_>Вот теперь проверяет чтобы в конце 24-го числа не было запятой, остался вопрос только как ограничить числа от 5 до 200, кто знает плиз подскажите: _>
_>Здравствуйте, Qulac, Вы писали: Q>>Начните с того, что искомая строка есть цепочка из 23 чисел с запятой, плюс еще одно число без запятой в конце строки.
Итак дальше. Число у нас это либо любая из цифр 5,6,7,8,9; либо любая цифра кроме 0 плюс цифра; либо 1, цифра, цифра; либо 200. Осталось написать, вставить и не запутаться.
Здравствуйте, _agg, Вы писали:
_>Здравствуйте, сколько лет пишу кодб столько лет регулярные выражения для меня остаются темным пятном, поэтому прошу помощи в простом вопросе. _> Есть строка в которой числа от 5 до 200 через запятую их 24, числа могут повторятся нужно проверить что эта строка соответствует формату, то есть в ней нет букв, нет символов кроме запятой и чисел 24. Пример строки "102,195,145,100,196,152,184,39,185,192,152,149,80,141,17,142,45,148,137,60,145,60,6,133" _>Спасибо.
Регекспы бывают позиксовые и перловые, у них несколько разный синтаксис. Поэтому хорошо бы уточнить с самого начала, о чём идёт речь.
Теперь сам регексп
"число от 5 до 200" NUMBER = ([5-9]|[1-9][0-9]|1[0-9][0-9]|200)
"24 числа" LIST = NUMBER(,NUMBER){23}
"только список" ^LIST$
Но, имхо, толку от такого регекспа — минимум. Он лишь даст ответ "правда ли, что строка — это 24 числа от 5 до 200, или нет". И что дальше?
Либо парсить список, либо сообщить о конкретной ошибке. Ну так об ошибке можно было бы сообщить во время разбора.
Здравствуйте, _agg, Вы писали:
_>Здравствуйте, сколько лет пишу кодб столько лет регулярные выражения для меня остаются темным пятном, поэтому прошу помощи в простом вопросе. _> Есть строка в которой числа от 5 до 200 через запятую их 24, числа могут повторятся нужно проверить что эта строка соответствует формату, то есть в ней нет букв, нет символов кроме запятой и чисел 24. Пример строки "102,195,145,100,196,152,184,39,185,192,152,149,80,141,17,142,45,148,137,60,145,60,6,133" _>Спасибо.
Здравствуйте, сколько лет пишу кодб столько лет регулярные выражения для меня остаются темным пятном, поэтому прошу помощи в простом вопросе.
Есть строка в которой числа от 5 до 200 через запятую их 24, числа могут повторятся нужно проверить что эта строка соответствует формату, то есть в ней нет букв, нет символов кроме запятой и чисел 24. Пример строки "102,195,145,100,196,152,184,39,185,192,152,149,80,141,17,142,45,148,137,60,145,60,6,133"
Спасибо.
В этом регулярном выражении, проверятся, чисел длиной 1-3 символа через запятую 24 числа. Пока непойму как ограничить число от 5 до 200 и после 24 цифры как запятую запретить постановку запятой.
_>В этом регулярном выражении, проверятся, чисел длиной 1-3 символа через запятую 24 числа. Пока непойму как ограничить число от 5 до 200 и после 24 цифры как запятую запретить постановку запятой.
Начните с того, что искомая строка есть цепочка из 23 чисел с запятой, плюс еще одно число без запятой в конце строки.
Здравствуйте, Qulac, Вы писали: Q>Начните с того, что искомая строка есть цепочка из 23 чисел с запятой, плюс еще одно число без запятой в конце строки.
Здравствуйте, MasterZiv, Вы писали:
MZ>Здравствуйте, _agg, Вы писали:
_>>Здравствуйте, сколько лет пишу кодб столько лет регулярные выражения для меня остаются темным пятном, поэтому прошу помощи в простом вопросе. _>> Есть строка в которой числа от 5 до 200 через запятую их 24, числа могут повторятся нужно проверить что эта строка соответствует формату, то есть в ней нет букв, нет символов кроме запятой и чисел 24. Пример строки "102,195,145,100,196,152,184,39,185,192,152,149,80,141,17,142,45,148,137,60,145,60,6,133" _>>Спасибо.
MZ>регвыр.
MZ>^(\d+)(,\d+)*$
MZ>регвыр. на С MZ>"^(\\d+)(,\\d+)*$"
Я не заметил "и чисел 24", выражение неправильное.
Здравствуйте, MasterZiv, Вы писали:
MZ>Я не заметил "и чисел 24"
у тебя в целом с внимательностью проблемы. перечитай исходный пост внимательнее, чтобы понять задачу
а еще можешь ветку прочитать и найти правильные ответы (они отмечены плюсиками)
MZ>Правильное --
неправильно
По условиям задачи если строка соответствует то ее можно отправлять, поэтому этого минимума толка более чем достаточно, спасибо.
К>Но, имхо, толку от такого регекспа — минимум. Он лишь даст ответ "правда ли, что строка — это 24 числа от 5 до 200, или нет". И что дальше? К>Либо парсить список, либо сообщить о конкретной ошибке. Ну так об ошибке можно было бы сообщить во время разбора.
Здравствуйте, uzhas, Вы писали:
U>у тебя в целом с внимательностью проблемы. перечитай исходный пост внимательнее, чтобы понять задачу U>а еще можешь ветку прочитать и найти правильные ответы (они отмечены плюсиками)
MZ>>Правильное -- U>неправильно