Двойные escape-символы в шаблонах регулярных выражений elisp

(regexp-opt '("this" "that"))

возвращается,

"\\(?:th\\(?:at\\|is\\)\\)

Почему в этом регулярном выражении elisp везде есть двойные обратные косые черты. Разве регулярное выражение elisp не использует одинарную обратную косую черту?

А также, ? символ является постфиксным оператором в шаблонах регулярных выражений, что означает, что он действует на предшествующие ему символы..(http://www.gnu.org/software/emacs/manual/html_node/elisp/Regexp-Special.html#Regexp-Special). но здесь нет выражений перед ? оператор. Итак, что означает часть (?:th\\ в этом регулярном выражении.


person Community    schedule 17.01.2015    source источник


Ответы (1)


Обратная косая черта является частью синтаксиса регулярного выражения. Но чтобы сохранить его как часть строки регулярного выражения, вам нужно защитить его другим обратным слэшем, как описано в документация по синтаксису для строк:

'Таким же образом вы можете включить обратную косую черту, поставив перед ней другую обратную косую черту, например: "это \\ является одинарной встроенной обратной косой чертой".

Что касается конструкции ?:, это то, как вы указываете незахватывающую или «застенчивую» группу:

"Застенчивая группа выполняет первые две функции обычной группы (управление вложенностью других операторов), но она не получает число, поэтому вы не можете вернуться к ее значению с помощью '\digit'. Застенчивые группы особенно полезно для механически сконструированных регулярных выражений, потому что они могут быть добавлены автоматически без изменения нумерации обычных, не застенчивых групп."

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

person Steve Vinoski    schedule 17.01.2015