0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 13
|
|
1 | |
Регулярное выражение по удалению комментариев (не задеть хинты)25.12.2019, 08:58. Просмотров 1514. Ответов 12
Необходимо написать регулярное выражение для удаления многострочных комментариев вида /* COMMENT */, но при этом не должны удаляться хинты вида /+ HINT */. Но если хинт находится в комментарии, его тоже нужно удалить.
Есть наработки: \/\*(?!\+)(.|\n)*?(\*\/)$ https://regex101.com/r/8CpB0X/1 Вроде работает, но если будет текст или пробел после красных */, то он будет идти до следующей закрывающей конструкции. Как можно модифицировать данное выражение? Или может переписать его как-то? Использоваться регулярное выражение будет на c# для обработки файла с кодом pl/sql.
0
|
|
25.12.2019, 08:58 | |
Регулярное выражение для многострочных комментариев Регулярное выражение: поиск комментариев в коде
Составить регулярное выражение для комментариев в тексте |
|
![]() 14840 / 11227 / 2947
Регистрация: 17.09.2011
Сообщений: 18,808
|
|
25.12.2019, 09:11 | 2 |
PL/SQL не является регулярным языком, потому использовать регулярные выражения для его парсинга — не самая лучшая затея.
Может, имеет смысл написать нормальный парсер? Или найти готовый — поисковики по запросу ".net plsql parser" выдают много интересных результатов. Если целью является только удаление комментариев, то обычная работа со строками при первом рассмотрении кажется более простым подходом.
1
|
850 / 646 / 208
Регистрация: 30.04.2009
Сообщений: 2,706
|
|
25.12.2019, 13:16 | 3 |
что если в конце комментария будет текст
/+ HINT ?
0
|
![]() 8647 / 6107 / 1019
Регистрация: 21.01.2016
Сообщений: 23,052
|
|
25.12.2019, 13:21 | 4 |
Мне тоже кажется, что простой конечный автомат перебирающий символы входной строки с текстом PL/SQL будет и проще и надёжнее, чем регулярка.
0
|
0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 13
|
|
25.12.2019, 13:51 [ТС] | 5 |
Это уже будет синтаксическая ошибка.
Только так может быть Код
/* COMMENT /*+ HINT */ */
0
|
850 / 646 / 208
Регистрация: 30.04.2009
Сообщений: 2,706
|
|
25.12.2019, 14:28 | 6 |
MikeGG, а это так по спецификации pl sql или вы сами придумали, что так было бы удобнее?
0
|
0 / 0 / 0
Регистрация: 28.05.2017
Сообщений: 13
|
|
25.12.2019, 14:31 [ТС] | 7 |
По спецификации pl sql так
0
|
850 / 646 / 208
Регистрация: 30.04.2009
Сообщений: 2,706
|
|
25.12.2019, 14:38 | 8 |
Тогда можете смело репортить баг в oracle ибо на официальном сайте это не так работает. (См. скрин)
0
|
850 / 646 / 208
Регистрация: 30.04.2009
Сообщений: 2,706
|
|
25.12.2019, 15:05 | 9 |
![]() Решение
Но если хочется упороться то такой regex
\/\*(?!\+)((.|\n)*?(\/\*\+.*?\*\/)?)*?\*\/ работает, хоть и не то все хинты выделяет в отдельные группы.
1
|
Usaga
|
25.12.2019, 17:30
#10
|
Не по теме: Интересно, знал ли человек выдумавший регулярки, что его творение будут упорно пытаться использовать для решения всех вопросов работы с текстом, даже там, где они вообще не в кассу?)
0
|
![]() 14840 / 11227 / 2947
Регистрация: 17.09.2011
Сообщений: 18,808
|
||||||
25.12.2019, 18:07 | 11 | |||||
До тех пор, пока в базе не решат хранить SQL-запросы в строковом представлении:
0
|
850 / 646 / 208
Регистрация: 30.04.2009
Сообщений: 2,706
|
|
25.12.2019, 18:22 | 12 |
В ТЗ не было ничего сказано о том что надо пропускать комментарии в строковых константах
![]()
0
|
Тематические курсы и обучение профессиям онлайн Профессия С#-разработчик (Skillbox) Архитектор ПО (Skillbox) Профессия Тестировщик (Skillbox) |
![]() 14840 / 11227 / 2947
Регистрация: 17.09.2011
Сообщений: 18,808
|
|
25.12.2019, 19:02 | 13 |
nicolas2008, да это не в ваш огород камень, а в огород самой идеи использования регексов для парсинга не регулярных языков.
Если уж для проверки банального адреса электропочты городят километры регекса, то чего о языках программирования говорить.
1
|
25.12.2019, 19:02 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь. Составить регулярное выражение удаления комментариев в javasctipt вставках регулярное выражение Регулярное выражение Регулярное выражение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |