我在elisp代码中有一个字符串变量,并希望使用正则表达式和分组从中提取一些部分到其他变量中。这是在任何语言中可以用1-2行代码编写的内容:
my ($user, $domain) = $email =~ m/^(.+)@(.+)$/;
如何在Elisp中编写相同的代码呢?
(save-match-data ; is usually a good idea
(and (string-match "\\`\\([^@]+\\)@\\([^@]+\\)\\'" email)
(setq user (match-string 1 email)
domain (match-string 2 email) ) ))
GNU Emacs Lisp参考手册是你的好朋友。另请参见http://emacswiki.org/emacs/ElispCookbook
.+
替换为[^@]+
是一种正确性修复,应该也适用于Perl正则表达式。我在Emacs中使用的反斜杠引号正确对应于Perl中的\A
和\Z
。总的来说,Perl具有更丰富的正则表达式扩展集,而Emacs具有一些特殊功能,例如其\s
语法字符类,因此并非所有正则表达式都可以直接转换。如果您想了解详细信息,请发布单独的问题。 - tripleee