Форум программистов, компьютерный форум, киберфорум
Наши страницы
XML/XSL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Nalik
132 / 84 / 41
Регистрация: 30.11.2012
Сообщений: 1,004
1

Регулярные выражение

02.03.2017, 16:30. Просмотров 806. Ответов 6
Метки нет (Все метки)

Помогите пожалуйста составить регулярное выражение. Задача такая:
Нужно раскрасить весь текст между символов ( и ); кроме самих символов, т.е. текст может состоять только из цифр и букв, перед скобками которого стоит одно из ключевых слов без учета регистра и пробелов.
Пример как должно выглядеть:
left(coordX, coordY);
lefT (coordX);
rigHT(coordX, coordY, coordZ);
т.е. символы не раскрашиваются вообще, не начальная скобка, не разделяющая запятая внутри скобок, ни конечная скобка со знаком ;. и перед этим делом обязательно должно стоять ключевое слово.

Если после открывающей скобки или перед закрывающей стоит символ, то это ошибочный сценарий и его раскрашивать не нужно.
Пример:
left(,coordX, coordY);

Первый день знакомлюсь с регулярными выражениям, вот мои относительно рабочие наброски, но еще не выполняющие все условия:

\([!\w].*.*[!\w]\); -Начинать поиск с "(" за которым следует любая буква или цифра кроме символов и заканчивается любой буквой или цифрой кроме символов за которыми следует ");"

Весь код:
XML
1
2
<style name="parameters" color="Green"/> //Цвет параметров
<rule style="parameters">\([!\w].*.*[!\w]\); </rule>
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2017, 16:30
Ответы с готовыми решениями:

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

Регулярные выражение
Всем привет, разбирал пример с учебника (регулярные выражения) и столкнулся не понятным явлением....

Регулярные выражение с#
не могу понять задание. требуется: Вывести на экран все адреса украинских веб сайтов содержащихся...

Регулярные выражение
Всем доборго дня! ПОмогите с кодом, если нетрудно. Мне нужно разбить текст на куски, которые...

Регулярные выражение
Доброго времени суток!! Я понимаю, что мой вопрос для кого-то покажется простым , но все же... ...

6
ФридрихФ
171 / 157 / 36
Регистрация: 23.10.2015
Сообщений: 665
02.03.2017, 18:35 2
Nalik,
Код
(?<=\()(.{1,})(?=\))
делал тут https://regex101.com/ питон и пхп понимают js не понимает....

Добавлено через 31 минуту
Nalik, не внимательно прочел твое сообщение....дело в том что тебе нужно делать два выражения, одно для того чтоб узнать что за пределами скобок и второе раскрску???
0
Nalik
132 / 84 / 41
Регистрация: 30.11.2012
Сообщений: 1,004
02.03.2017, 18:44  [ТС] 3
ФридрихФ, ваш пример выдает ошибку.
Немного доработал скрипт свой. Но тут нет проверки символа после открывающей скобки и не работает если ключевое слово написано слитно с параметром.
XML
1
<rule style="parameters" options="IgnoreCase">(leftDOWN|leftUP|left|rightDOWN|rightUP|right|SendDOWN|SendUP|Send|Sleep)([?\s]|[!\s])\(*.*[?\w]\);</rule>
0
Миниатюры
Регулярные выражение  
Nalik
132 / 84 / 41
Регистрация: 30.11.2012
Сообщений: 1,004
02.03.2017, 18:55  [ТС] 4
Цитата Сообщение от ФридрихФ Посмотреть сообщение
тебе нужно делать два выражения, одно для того чтоб узнать что за пределами скобок и второе раскрску???
Нет, мне нужно чтобы шла проверка правильно ли составлен блок кода.
ключевое_слово1| ключевое_слово2|ключевое_слово3 и т.д.(<- это открывающая скобка - делаем проверку, что после открывающей скобки не стоит символ, параметр1, параметр2, параметр3 и т.д. делаем проверку, что перед закрывающей скобкой не стоит символ -> это закрывающая скобка ->); и всё это делается без учета регистра и без учёта пробелов, т.е. пробелов между словами скобками и т.д. может быть сколько угодно или не быть вообще.

Правильный блок кода:
left(param1);
left (param1);
left (param1);
left ( param1 );
left(param1,param2);
LEFT(param1,param2);
LEFT(param1, param2);
LEFT(param1,param2);

Неправильный блок кода:
lef1111t(param1,param2);
left(,param1,param2);
left(param1, param2,);
0
ФридрихФ
171 / 157 / 36
Регистрация: 23.10.2015
Сообщений: 665
02.03.2017, 20:16 5
Nalik,
Код
^[a-zA-Z]+\([a-zA-Z\s+][(\w+,\s+)]{1,}[a-zA-Z0-9\s+]\)
Добавлено через 1 минуту
Nalik, я ведь не пойму, тебе нужно вернуть то, что будеть игнорироваться? или то что подсвечиваться???
0
Nalik
132 / 84 / 41
Регистрация: 30.11.2012
Сообщений: 1,004
02.03.2017, 20:22  [ТС] 6
Вот это вариант мне подходит за исключением 1 НО, тут не предусмотрена проверка на символы перед закрывающей скобкой, может его разбирающийся человек доработать?
XML
1
/(leftDOWN|leftUP|left|rightDOWN|rightUP|right|SendDOWN|SendUP|Send|Sleep)([\s]*)(\([\w]).*(\));/x
Добавлено через 26 секунд
Цитата Сообщение от ФридрихФ Посмотреть сообщение
то что подсвечиваться???
То, что подсвечиваться
0
Nalik
132 / 84 / 41
Регистрация: 30.11.2012
Сообщений: 1,004
02.03.2017, 20:27  [ТС] 7
Скрины вашего и моего примеров, пользовался этим (кликабельно) сервисом
0
Миниатюры
Регулярные выражение   Регулярные выражение  
02.03.2017, 20:27
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.03.2017, 20:27

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Регулярные выражение
У меня какое-то такое регулярное выражение: p = re.compile(r&quot;\n +&quot;) Я хочу найти все совпадения...

Регулярные выражение
Всем привет. Как с помощью pattern и matcher вывести все числа, но только после определенного...

Регулярные выражение
Всем привет. Как с помощью pattern и matcher вывести все числа, но только после определенного...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.