Двойни екраниращи знаци в шаблони на регулярен израз на 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)


Обратната наклонена черта е част от синтаксиса на regexp. Но за да го запазите като част от низ на регулярен израз, трябва да го защитите с друга обратна наклонена черта, както е документирано в синтаксис за документация за низове:

„По същия начин можете да включите обратна наклонена черта, като поставите пред нея друга обратна наклонена черта, като това: „това \\ е единична вградена обратна наклонена черта“.“

Що се отнася до конструкцията ?:, това е начинът, по който определяте незахващаща или "срамежлива" група:

"Срамежливата група обслужва първите две цели на обикновена група (контролиране на влагането на други оператори), но не получава число, така че не можете да се върнете към нейната стойност с '\цифра'. Срамежливите групи са особено полезни за механично конструирани регулярни изрази, тъй като те могат да се добавят автоматично, без да се променя номерирането на обикновени, несрамежливи групи."

Той е документиран като част от документацията за обратно наклонена черта на regexp. Както цитираният пасаж обяснява по-горе, това е полезно във функции като regexp-opt за групиране на модели без създаване на групи за улавяне.

person Steve Vinoski    schedule 17.01.2015