Как работает эта регулярка?

311
16 января 2017, 20:43

есть регулярка

{B}*"namespace"{BN}*/[^a-z_A-Z0-9]

где {B} это символы отступов вроде пробелов или табов, а {BN} это пробелы табы и переход на новую строку.

Мне не понятно что делает символ / перед [^a-z_A-Z0-9].

Answer 1

пользователь @Wiktor Stribiżew оказался прав. Этот символ нечто иное как символ завершающего контекста. О нём можно прочитать тут. В результате должно вернуться значение {B}*"namespace"{BN}*, за которым следует [^a-z_A-Z0-9]

Для обработки ситуаций, требующих опережающего просмотра, используется символ / (не путать с символом ), который обозначает, что следующая за ним последовательность является завершающим контекстом и ее не следует сохранять в yytext[], поскольку она не входит в саму лексему. Правило для распознавания DO в Фортране можно записать так:

DO/[0-9 ]*[a-zA-Z0-9 ]+=[a-zA-Z0-9 ]+, printf("нашли DO");

То есть это аналог (?=...) в PCRE.

READ ALSO
Что значит исключение _Pnext было 0x114999C.?

Что значит исключение _Pnext было 0x114999C.?

Написал программу, которая считывает информацию о студентах (имя фамилию и баллы за три проверочных теста)Работает, в принципе

366
Массив структуры [требует правки]

Массив структуры [требует правки]

Разработайте структуру для хранения данных о цветном кружке:

276
После компиляции трансляция?

После компиляции трансляция?

Изучаю WinApi, столкнулся в одной книге с таким описанием:

285
Функция со switch с переменным количеством case

Функция со switch с переменным количеством case

Допустим, у меня есть несколько таких блоков:

321