68 / 55 / 13
Регистрация: 26.07.2021
Сообщений: 189
|
|
1 | |
Выделение текста в парных скобках24.09.2021, 12:54. Показов 971. Ответов 2
Метки нет (Все метки)
Я достаточно средне разбираюсь в регулярных выражениях, а тут возникла следующая задача:
В многострочном тексте выделить блок, заключённый в парные скобки (* и *), учитывая, что внутри этого блока могут содержаться и другие аналогичные блоки. Кроме того, правильность текста не гарантируется, поэтому открывающих скобок может быть больше, чем закрывающих. В таком случае нужно выделить всё от открывающей скобки до конца текста. После некоторых размышлений и экспериментов у меня получилось следующая конструкция: Код
\(\* ( (?R) | [^*] | \*(?=[^)]) | \*$ )* ( \*\) | $ )
0
|
24.09.2021, 12:54 | |
Ответы с готовыми решениями:
2
Выделение текста в скобках Выделение текста находящегося в скобках Выделение курсивом текста в скобках Как сделать выделение парных скобок в Дельфи 7? Как включить выделение парных скобок в LIsp in a Box? |
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
|
|
27.09.2021, 22:17 | 2 |
Не уверен в правильности вашего выбора в сторону регулярных выражений, так как описанная вами задача по сути относится к классическим алгоритмам разбора строк, а точнее - поиску парных скобок. Псевдокод решения данной задачи примерно таков:
Код
function isProperlyNested(text : string) : boolean { var counter : uint = 0; for (var sym : char of text) { if (sym === '(') ++counter; else if (sym === ')') { --counter; if (counter < 0) return false; } } return counter === 0; }
1
|
68 / 55 / 13
Регистрация: 26.07.2021
Сообщений: 189
|
|
27.09.2021, 22:52 [ТС] | 3 |
Была б моя воля, я бы тоже делал по-человечески. Но это языковой модуль для Notepad++ (FunctionList), а там всё нужно описывать исключительно регулярными выражениями.
Это выражение, описывающее многострочные комментарии (от "(*" до "*)"). Они могут быть вложенными и находиться абсолютно где угодно. А поскольку код работает в процессе написания исходников, то синтаксическую правильность (в данном случае - сбалансированность скобок в файле) ему никто не гарантирует. Точнее, можно быть уверенным, что обязательно придётся столкнуться с её нарушениями. Модуль, вроде, получился рабочий - составленные мной тесты с разными неправильностями прошёл, на реальных файлах функции выгребает корректно. Но я всегда забочусь об оптимальности (расход памяти и процессора), а в области регулярных выражений я не самый великий специалист, и поэтому решил спросить.
0
|
27.09.2021, 22:52 | |
27.09.2021, 22:52 | |
Помогаю со студенческими работами здесь
3
Выделение в тексте жирным шрифтом прописными буквами 16 с мигающим фоном каждого четного символа в фигурных скобках Функция удаления текста в скобках Удалить часть текста в круглых скобках Парсинг текста: получить значения в скобках Выделение слова в скобках и поиск слова без определенных букв Поиск парных символов в словах текста. c++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |