LINUX.ORG.RU

elisp regexps


0

0

> ‘\digit’ matches the same text that matched the digitth occurrence of a grouping (‘\( ... \)’) construct.

In other words, after the end of a group, the matcher remembers the beginning and end of the text matched by that group. Later on in the regular expression you can use ‘\’ followed by digit to match that same text, whatever it may have been.

The strings matching the first nine grouping constructs appearing in the entire regular expression passed to a search or matching function are assigned numbers 1 through 9 in the order that the open parentheses appear in the regular expression. So you can use ‘\1’ through ‘\9’ to refer to the text matched by the corresponding grouping constructs.

For example, ‘\(.*\)\1’ matches any newline-free string that is composed of two identical halves. The ‘\(.*\)’ matches the first half, which may be anything, but the ‘\1’ that follows must match the same exact text.

а есть ли какой-нибудь способ поймать некоторый набор символов в регекспе и использовать его вдальнейше вне данного регекспа, т.е. непосредственно в дальнейшем elisp коде.

как, например, в перле $var =~ /.*([a-z]+).+/; my capt = $1;

или использованием regexp ссылок только в контектсте того же regexp'a всё ограничивается?

спасибо.


Ответ на: комментарий от anonymous

>Emacs keeps track of the positions of the start and end of segments of text found during a regular expression search. This means, for example, that you can search for a complex pattern, such as a date in an Rmail message, and then extract parts of the match under control of the pattern.

anonymous
()
Ответ на: комментарий от anonymous

это знаем. например (string-match regexp str) вернёт мне начало совпадающей строки, а (end-match 0) конец. но когда мне нужно выцепить из одно строки несколько переменных такой способ довольно громоздок. если бы regexp references можно было бы использовать впоследствии в elisp коде, то это выглядело бы гораздо проще, аки на перле:

$var =~ /.*([a-z]+):([0-9]+):([a-zA-Z_]+)?/; my $(one, two, three) = ($1, $2, $3);

asgard
() автор топика
Ответ на: комментарий от swizard

> Макросы?

крайний вариант. в принуипе для таких вещей нужны build-in ф-ии, ибо regexp reference в контексте самих регекспов гораздо менее полезны и реже применемы, нежели их _нормальные_ аналоги. меня просто удивляет, неужели в elisp'e нет таких примитивов?

asgard
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.