1

Тема: Пошук значення регулярним виразом

Є два рядки.

#define    CONTENTS_ORIGIN            0x1000000    /**< removed before bsp-ing an entity. */
#define     DMG_DISSOLVE                (1 << 26)            /**< Dissolving! */

Допоможіть знайти значення другого виразу.
В першому все просто ^#define\s+\w*\s+(\S*)  - спочатку йде ключову слово -> пропуск(один чи більше) -> слово -> пропуск(один чи більше) -> потрібне значення

А в другому треба створити підмножину яка включає один пропуск підряд, що типу [\s{1}], має біти щось типу [\S[\s{1}]]

Підскажіть як правильно це зробити?
Дякую

2

Re: Пошук значення регулярним виразом

Очевидно, треба захопити увесь текст після другого пропуску до кінця рядка:

^#define\s+\w*\s+(.*)$
Подякували: NaharD1

3

Re: Пошук значення регулярним виразом

Цей спосіб я застосую, якщо не знайду оптимальної відповіді.  Я впевнений, що це можна зробити одним рядком і без додаткових операції.

4

Re: Пошук значення регулярним виразом

До речі, #define ще може продовжуватись на кілька рядків з допомогою «\» вкінці рядка (у прикладі вище цього нема, але інколи такий синтаксис використовується). Якщо програма, що працює з регексами, переглядає текст по одному рядку, то треба попередньо ці рядки з бекслешем об'єднати між собою, плюс урахувати деякі нюанси, пов'язані з обробкою '\n' у регексах...

Подякували: NaharD1

5

Re: Пошук значення регулярним виразом

Дякую, не знав!
Але в мене таке не зустрічається. Що у мене є, так це невизначенівсть у вигляді коментарів, вони або над дефайном, або праворуч від нього, що трохи ускладнює розбір.

ПС. Не знайшов рішення своєї задачі. Тому поки реалізовано як раніше було написано - парсимо все і потім видаляємо коментар.