Змінюй хід війни! Допомагай ЗСУ!
  • Пошук тимчасово не працює

Регулярное выражение(need help)

  • Автор теми Автор теми Sid_Vicious
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 04.11.2008
Повідом.: 154
Регулярное выражение(need help)

Собственно сабж нужно написать регулярку:
Функция tg (тангенс)находится в конце выражения. Перед функцией могут быть любые арифметические действия, среди которых встречается не менее одного и не более трех сложений или вычитаний подряд.
Тоесть:
4+3/3+4+5+6-tg(45) - правильное регулярное выражение
3-4-6-6-5/2/3+tg(200)-неправильное

Я себе уже плеш проел=) Буду рад если кто поможет. Заранее спасибо
 
(\d+[+-]){1,3}tg(\d+)
 
Я бы сказал, что скорее
Код:
(\d+([/\*]\d+)*[+-]){1,3}tg\(\d+\)
для учёта умножения и деления. И всё равно задача хитрее, ибо нужно не более 3 сложений или вычитаний подряд (см "правильный" пример в начальном посте).

4+3/3+4+5+6-tg(45) - правильное регулярное выражение
Я лично тоже сразу не правильно понял задание. Этот пример полностью правильный. В нём идёт 3 сложения подряд, но нет 4, как во втором "неправильном" примере.

среди которых встречается не менее одного и не более трех сложений или вычитаний подряд.
Что значит "не менее одного" здесь? То, что не может быть двух умножений или делений подряд вообще?
 
Останнє редагування:
Я бы сказал, что скорее
Код:
(\d+([/\*]\d+)*[+-]){1,3}tg\(\d+\)
для учёта умножения и деления. И всё равно задача хитрее, ибо нужно не более 3 сложений или вычитаний подряд (см "правильный" пример в начальном посте).
.

вот и я о том же=) задача не так проста как может показаться
для регулярки что написано выше не проходит
4/4/4-6-6+4+4+tg(4) - хотя это правильный вариант
и этот тоже не проходит 6*6-3-4-5+tg(4) он также првильный
 
Эта задача напоминает о великом изречении
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
по теме. И всё же предлагается такой вариант:
Код:
(((\d+[+-]){0,3}\d+)[/\*])*((\d+[+-]){1,3}\d+)([/\*]((\d+[+-]){0,3}\d+))*[+-]tg\(\d+\)

4/4/4-6-6+4+4+tg(4) - хотя это правильный вариант

А почему это правильный вариант? Я вижу в нём 4 операции +/- подряд 4-6-6+4+4.
 
А почему это правильный вариант? Я вижу в нём 4 операции +/- подряд 4-6-6+4+4.

Перед функцией могут быть любые арифметические действия, среди которых встречается не менее одного и не более трех сложений или вычитаний подряд.
 
Перед функцией могут быть любые арифметические действия, среди которых встречается не менее одного и не более трех сложений или вычитаний подряд.

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

В любом случае мне лень дальше заниматься кописатом, дабы разбить сложения и вычитания в моём предыдущем варианте. Это тот самый случай, когда я полностью поддерживаю автора цитаты, на которую сослался. Кроме того, не ясно, что значит часть про "не менее одного" (я вижу более одной трактовки), что может потребовать дополнительной "заточки".
 
ну и на этом спасибо=)
 
А просто скобки нельзя использовать?
(3-4-6-6-(5/2/3))+tg(200)

По правилам здесь вообще слева получается один операнд.
Или я чего-то не понимаю?

Ну или на крайняк можно функцией воспользоваться:

function leftoperand()
{
return (3-4-6-6-(5/2/3));
}

leftoperand()+tg(200);
 
Назад
Зверху Знизу