2013-04-26 93 views
2

我在elisp代码中的某个地方有一个字符串变量,并且想要使用带有分组的正则表达式将其某些部分抽取到其他变量中。在这个时候,你可以在1-2行写在任何语言:Emacs lisp:从正则表达式匹配中获取子匹配

my ($user, $domain) = $email =~ m/^(.+)@(.+)$/;

我怎样写相同的elisp的?

回答

4
(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 Reference Manual是你的朋友。另请参阅http://emacswiki.org/emacs/ElispCookbook

+0

工作,谢谢!记住我的话:我在尝试之前尝试阅读食谱,但没有在合理的时间内拿出食谱:-) – 2013-04-26 21:09:10

+0

有没有简单的方法来将Perl正则表达式(在breqwas的问题中提到)转换为emacs正则表达式提到? – aartist 2013-04-26 22:17:42

+0

@aartist:用'[^ ​​@] +'替换'。+'是一个正确的解决方法,它也应该应用于Perl正则表达式。我使用的Emacs反斜杠引号对应于Perl中的'\ A'和'\ Z'。一般来说,Perl有更丰富的正则表达式扩展集,而Emacs有一些特殊的东西,比如它的'\ s'语法字符类,所以并不是所有的正则表达式都可以直接转换。如果您想要详细信息,请另外提出问题。 – tripleee 2013-04-27 05:58:17