Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
343 / 305 / 135
Регистрация: 14.03.2015
Сообщений: 1,140
Записей в блоге: 1
1

Регулярное выражение для проверки if

04.05.2016, 14:18. Показов 1356. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.

У меня имеется небольшой опыт использования регулярных выражений, посему ошибка может быть банальной, за что прошу прощения.

У меня имеется строки вида:
ifvalue == 10 {
if value == 10 {
if value==10 {

Ну, то есть строка с оператором условия.

Мне необходимо проверить правильность написания (т.е. ifvalue - ошибка).
Также следует забрать подстроку - условия.

Раньше я использовал такую регулярку: \s?if\s?(.*)\s?{
В принципе - она отрабатывала как надо. Но я задумался над возможностью, что после оператора if не будет пробела.

Каким образом можно перестроить регулярку так, чтобы заиметь группу, в которой будет находится if и все символы до пробела?
Но таким образом, чтобы это работало в обе стороны - если есть ошибка, то в группах (MatchCollection) будут:
Код
[1]: ifvalue
[2]: value == 10
И если нет ошибки:
Код
[1]: if
[2]: value == 10
Пробовал написать регулярку, но все время шел (как я считаю) не по тому пути:
\s?(if\S*)\s?(.*)\s?{

Спасибо.

PS.
Ещё в другом месте (для проверки условия) использую такую регулярку: (!|<|>)=?|==
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2016, 14:18
Ответы с готовыми решениями:

Регулярное выражение для проверки имени файла
Доброе время суток! Помогите пожалуйста написать регулярное выражение, которое будет проверять...

Регулярное выражение для проверки корректности арифметического выражения
В этой теме https://www.cyberforum.ru/csharp-beginners/thread789349.html обсуждалось создание...

Регулярное выражение для проверки строки на номер телефона
Регулярное выражение для проверки строки на номер телефона в формате +37525-xxx-xx-xx Вот...

Регулярное выражение для проверки корректности доменного имени
Подскажите регулярное выражение для проверки корректности доменного имени вида xxxxxx.xxx (к...

4
1 / 1 / 0
Регистрация: 20.03.2013
Сообщений: 69
04.05.2016, 14:28 2
Цитата Сообщение от bodynar Посмотреть сообщение
ifvalue == 10 {
if value == 10 {
if value==10 {
по поводу этого, я думаю подойдет регулярка
^\s*if\s+\w+\s*==\s+\{$
хотя могу и ошибаться, но не совсем понятно надо ли запоминать группы, следовательно разбивать на группы или нет...
0
343 / 305 / 135
Регистрация: 14.03.2015
Сообщений: 1,140
Записей в блоге: 1
04.05.2016, 14:37  [ТС] 3
Farmer, Спасибо, но предложенная вами регулярка будет работать только на одном варианте (и то, кривом) if value == {.
Цитата Сообщение от Farmer Посмотреть сообщение
надо ли запоминать группы
Да, необходимо, чтобы в дальнейшем "склеить" строку по определенному образцу.

Добавлено через 2 минуты
Думаю, что тему можно закрыть.

Все же добрался до нужного момента:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
// if name == "world" {
 
 
            // \s?if\s?(.*)\s?{ - 1
            // \s?(if(\S*))\s?(.*)\s?{ - 2
 
            var match = Regex.Match(innerData, @"\s?(if\S*)\s?(.*)\s?{");
            var condition = match.Groups[2].Value;
 
            if (!Regex.IsMatch(condition, @"(!|<|>)=?|==") 
                || string.IsNullOrEmpty(condition) 
                || match.Groups[1].Value.Trim().Length > 2)
                throw new ArgumentException(innerData);
0
1 / 1 / 0
Регистрация: 20.03.2013
Сообщений: 69
04.05.2016, 14:52 4
то есть, вам надо отловить именно с ошибкой и запомнить его? или
Цитата Сообщение от bodynar Посмотреть сообщение
(if\S*)
вот этого куска я все же не пойму "(S)пропустить любой символ кроме пробела"... значит я изначать не правильно понял и смотрел на это с другой стороны (отловить должно только правильный вариант)... но все же хорошо что разобрались
0
343 / 305 / 135
Регистрация: 14.03.2015
Сообщений: 1,140
Записей в блоге: 1
04.05.2016, 15:56  [ТС] 5
Farmer, Ну, необходимо было регуляркой разбить по блокам (само слово if, потом условие).
Ну и соответственно проверить правильность написания (банальная проверка на пробелы и операторы сравнения).
Цитата Сообщение от Farmer Посмотреть сообщение
(if\S*)
Таким образом я пытаюсь словить неправильное написание.
1
04.05.2016, 15:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2016, 15:56
Помогаю со студенческими работами здесь

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

Регулярное выражение для проверки что фамилия начинается на "А"
Задание. Даны ФИО учеников, вывести Фио каждого ученика фамилия которого начинается на &quot;А&quot;, на...

Регулярное выражение проверки MAC-адреса
Написать регулярное выражение определяющее является ли заданная строка правильным MAC-адресом...

Регулярное выражения для проверки НЕ начинается со строки
Как написать регулярное выражение, которое проверяет, что строка НЕ начинается с указанной строки ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru