Вот сложное регулярное выражение, которое ранее использовалось Emacs для
распознавания конца предложения вместе с любым последующим пробельным
символом. (В настоящее время Emacs использует аналогичное, но более сложное
регулярное выражение по умолчанию, созданное функцией sentence-end.
См. Стандартные регулярные выражения, используемые при редактировании.)
Ниже мы сначала показываем регулярное выражение как строку в синтаксисе Lisp (чтобы отличить пробелы от символов табуляции), а затем результат его вычисления. Строковый констант начинается и заканчивается двойными кавычками. ‘\"’ обозначает двойную кавычку как часть строки, ‘\\’ — обратный слеш как часть строки, ‘\t’ — табуляция, и ‘\n’ — новая строка.
"[.?!][]\"')}]*\\($\\| $\\|\t\\| \\)[ \t\n]*"
⇒ "[.?!][]\"')}]*\\($\\| $\\| \\| \\)[
]*"
В выводе табуляция и новая строка отображаются как сами по себе.
Это регулярное выражение содержит четыре части последовательно и может быть расшифровано следующим образом:
[.?!]Первая часть шаблона — это выражение в квадратных скобках, которое сопоставляет любой из трех символов: точку, вопросительный знак и восклицательный знак. Соответствие должно начинаться с одного из этих трех символов. (Здесь один из моментов, где новое значение по умолчанию, используемое Emacs, отличается от старого. Новое значение также допускает некоторые не-ASCII символы, которые завершают предложение без последующих пробелов.)
[]\"')}]*Вторая часть шаблона соответствует любым закрывающим фигурным скобкам и
кавычкам, ноль или более раз, которые могут следовать за точкой, вопросительным
знаком или восклицательным знаком. \" — это синтаксис Lisp
для двойной кавычки в строке. Символ ‘*’ в конце
указывает, что непосредственно предшествующее регулярное выражение (выражение в
квадратных скобках в данном случае) может повторяться ноль или более раз.
\\($\\| $\\|\t\\| \\)Третья часть шаблона соответствует пробельным символам, которые следуют за концом предложения: концом строки (возможно, с пробелом), или табуляцией, или двумя пробелами. Двойные обратные слеши обозначают круглые скобки и вертикальные черты как синтаксис регулярного выражения; скобки определяют группу, а вертикальные черты разделяют альтернативы. Знак доллара используется для сопоставления концом строки.
[ \t\n]*Наконец, последняя часть шаблона соответствует любым дополнительным пробельным символам, выходящим за рамки минимума, необходимого для завершения предложения.
В нотации rx (см. Структурированная нотация
регулярных выражений rx) регулярное выражение можно было бы
написать
(rx (any ".?!") ; Пунктуация, завершающая предложение.
(zero-or-more (any "\"')]}")) ; Закрывающие кавычки или скобки.
(or line-end
(seq " " line-end)
"\t"
" ") ; Два пробела.
(zero-or-more (any "\t\n "))) ; Необязательный дополнительный пробел.
Поскольку регулярные выражения rx — это просто S-выражения, их можно
форматировать и комментировать как таковые.