Обрабатывать метасимволы в регулярных выражениях

В C, когда вы экранируете символ, отличный от встроенных специальных символов, его ASCII-код остается неизменным: \+ - это то же самое, что и +. Я пишу движок регулярных выражений и удивляюсь, как можно различить, например, \ + и +.

1 ответ

Решение

Обычное решение состоит в том, что механизм регулярных выражений ожидает увидеть \+, так что если регулярное выражение исходит из строкового литерала, то программист должен будет написать \\+, Как ни странно, этот подход даже используется в некоторых языках, которые имеют встроенную / стандартную поддержку регулярных выражений, поэтому могут предлагать специальный синтаксис регулярных выражений.

Теоретически, альтернативный подход заключается в использовании другого экранирующего символа - скажем, использовать + для "одного или нескольких" и '+ для "фактического знака плюс" - чтобы не конфликтовать с символами строковых литералов; но этот подход почему-то кажется бесконечно менее популярным.

Другие вопросы по тегам