Обрабатывать метасимволы в регулярных выражениях
В C, когда вы экранируете символ, отличный от встроенных специальных символов, его ASCII-код остается неизменным: \+ - это то же самое, что и +. Я пишу движок регулярных выражений и удивляюсь, как можно различить, например, \ + и +.
1 ответ
Обычное решение состоит в том, что механизм регулярных выражений ожидает увидеть \+
, так что если регулярное выражение исходит из строкового литерала, то программист должен будет написать \\+
, Как ни странно, этот подход даже используется в некоторых языках, которые имеют встроенную / стандартную поддержку регулярных выражений, поэтому могут предлагать специальный синтаксис регулярных выражений.
Теоретически, альтернативный подход заключается в использовании другого экранирующего символа - скажем, использовать +
для "одного или нескольких" и '+
для "фактического знака плюс" - чтобы не конфликтовать с символами строковых литералов; но этот подход почему-то кажется бесконечно менее популярным.