2013-04-26 94 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