Помогите плиз с регулярным выражением.
От: _agg  
Дата: 16.07.16 12:45
Оценка:
Здравствуйте, сколько лет пишу кодб столько лет регулярные выражения для меня остаются темным пятном, поэтому прошу помощи в простом вопросе.
Есть строка в которой числа от 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"
Спасибо.
Re: Помогите плиз с регулярным выражением.
От: _agg  
Дата: 16.07.16 14:00
Оценка:
Немного повспоминал вот что написал :
m_ptxtInput->setValidator(new QRegExpValidator( QRegExp( "([0-9]{1,3}([,-]|$)){24}") ));

В этом регулярном выражении, проверятся, чисел длиной 1-3 символа через запятую 24 числа. Пока непойму как ограничить число от 5 до 200 и после 24 цифры как запятую запретить постановку запятой.
Re[2]: Помогите плиз с регулярным выражением.
От: Qulac Россия  
Дата: 16.07.16 14:27
Оценка:
Здравствуйте, _agg, Вы писали:

_>Немного повспоминал вот что написал :

_>
_>m_ptxtInput->setValidator(new QRegExpValidator( QRegExp( "([0-9]{1,3}([,-]|$)){24}") ));
_>

_>В этом регулярном выражении, проверятся, чисел длиной 1-3 символа через запятую 24 числа. Пока непойму как ограничить число от 5 до 200 и после 24 цифры как запятую запретить постановку запятой.

Начните с того, что искомая строка есть цепочка из 23 чисел с запятой, плюс еще одно число без запятой в конце строки.
Программа – это мысли спрессованные в код
Re[3]: Помогите плиз с регулярным выражением.
От: _agg  
Дата: 16.07.16 16:25
Оценка:
Вот теперь проверяет чтобы в конце 24-го числа не было запятой, остался вопрос только как ограничить числа от 5 до 200, кто знает плиз подскажите:
    m_ptxtInput->setValidator(new QRegExpValidator( QRegExp( "([0-9]{1,3}([,-])){23}([0-9]{1,3}($)){1}") ))


Здравствуйте, Qulac, Вы писали:
Q>Начните с того, что искомая строка есть цепочка из 23 чисел с запятой, плюс еще одно число без запятой в конце строки.
Re[4]: Помогите плиз с регулярным выражением.
От: Qulac Россия  
Дата: 16.07.16 17:03
Оценка: +2
Здравствуйте, _agg, Вы писали:

_>Вот теперь проверяет чтобы в конце 24-го числа не было запятой, остался вопрос только как ограничить числа от 5 до 200, кто знает плиз подскажите:

_>
_>    m_ptxtInput->setValidator(new QRegExpValidator( QRegExp( "([0-9]{1,3}([,-])){23}([0-9]{1,3}($)){1}") ))
_>


_>Здравствуйте, Qulac, Вы писали:

Q>>Начните с того, что искомая строка есть цепочка из 23 чисел с запятой, плюс еще одно число без запятой в конце строки.

Итак дальше. Число у нас это либо любая из цифр 5,6,7,8,9; либо любая цифра кроме 0 плюс цифра; либо 1, цифра, цифра; либо 200. Осталось написать, вставить и не запутаться.
Программа – это мысли спрессованные в код
Отредактировано 16.07.2016 17:13 Qulac . Предыдущая версия .
Re: Помогите плиз с регулярным выражением.
От: tehKosh  
Дата: 17.07.16 16:57
Оценка: +3 :)))
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++;
  }
}
Re: Помогите плиз с регулярным выражением.
От: MasterZiv СССР  
Дата: 18.07.16 14:06
Оценка: -1
Здравствуйте, _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"
_>Спасибо.


регвыр.

^(\d+)(,\d+)*$

регвыр. на С
"^(\\d+)(,\\d+)*$"
Re[2]: Помогите плиз с регулярным выражением.
От: MasterZiv СССР  
Дата: 20.07.16 09:38
Оценка:
Здравствуйте, 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", выражение неправильное.

Правильное --

^(\d+)(,\d+){23}*$
Re[3]: Помогите плиз с регулярным выражением.
От: uzhas Ниоткуда  
Дата: 20.07.16 11:36
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Я не заметил "и чисел 24"


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

MZ>Правильное --

неправильно
Отредактировано 20.07.2016 11:37 uzhas . Предыдущая версия .
Re: Помогите плиз с регулярным выражением.
От: Кодт Россия  
Дата: 20.07.16 11:50
Оценка: +2
Здравствуйте, _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$

Итого
/^([5-9]|[1-9][0-9]|1[0-9][0-9]|200)(,([5-9]|[1-9][0-9]|1[0-9][0-9]|200)){23}$/

Но, имхо, толку от такого регекспа — минимум. Он лишь даст ответ "правда ли, что строка — это 24 числа от 5 до 200, или нет". И что дальше?
Либо парсить список, либо сообщить о конкретной ошибке. Ну так об ошибке можно было бы сообщить во время разбора.
Перекуём баги на фичи!
Re[2]: Помогите плиз с регулярным выражением.
От: _agg  
Дата: 27.07.16 17:30
Оценка:
По условиям задачи если строка соответствует то ее можно отправлять, поэтому этого минимума толка более чем достаточно, спасибо.

К>Но, имхо, толку от такого регекспа — минимум. Он лишь даст ответ "правда ли, что строка — это 24 числа от 5 до 200, или нет". И что дальше?

К>Либо парсить список, либо сообщить о конкретной ошибке. Ну так об ошибке можно было бы сообщить во время разбора.
Re[4]: Помогите плиз с регулярным выражением.
От: MasterZiv СССР  
Дата: 23.08.16 11:52
Оценка:
Здравствуйте, uzhas, Вы писали:

U>у тебя в целом с внимательностью проблемы. перечитай исходный пост внимательнее, чтобы понять задачу

U>а еще можешь ветку прочитать и найти правильные ответы (они отмечены плюсиками)

MZ>>Правильное --

U>неправильно

Ну и чёрт с ними...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.