Normal ifadeler aracı örnek açıklaması
EmacsWiki'de bölüm normal ifadeleri okunduğunda şu görünür:
You can use a tool to construct regexps. For example, you can use ‘rx’ like this:
(rx (or (and "\*" (*? anything) "*/") (and "//" (*? anything) eol)))
To produce this regexp (which matches C-style multiline and single line comments):
\\*\\(?:.\\|\n\\)*?\\*/\\|//\\(?:.\\|\n\\)*?$
Elde orC tarzı satırlı veya C / C ++ tek satır bir yorum ya eşleşir.
Ama andparçaları alamıyorum .
Nasıl
anythingçalıştığından emin değilim ve bunun herhangi bir karakterle eşleşeceğini varsayıyorum.
Eşdeğer bir şey olabilir.*. Bu mu?Doğru
*?anladıysam,*operasyonun açgözlü olmayan çeşidi .
Bu gerçekten kafamı karıştırıyor ... Mümkün olan en küçük eşleşmeanything?C tarzı çok satırlı açılış neden "\ *" olarak gösteriliyor ? EmacsWiki'de bir yazım hatası olduğundan şüpheleniyorum ve "/ *" olmalı .
Yanıtlar
anythingregexp .herhangi bir karakterle eşleşirken, yeni satır dışında herhangi bir karakterle eşleşir , rx temsili not-newline.
*?açgözlü olmayan, sıfır veya daha fazla ile eşleşir. C kodundan yorum çıkaralım:
/* comment */ char *s = "*/";
;; * is zero-or-more, greedy
(let ((string "/* comment */ char *s = \"*/\""))
(when (string-match (rx "/*" (* anything) "*/") string)
(match-string 0 string)))
;; => "/* comment */ char *s = \"*/"
;; *? is zero-or-more, non-greedy
(let ((string "/* comment */ char *s = \"*/\""))
(when (string-match (rx "/*" (*? anything) "*/") string)
(match-string 0 string)))
;; => "/* comment */"
Belgeyi Ch f rx veya (info "(elisp) Rx Notation") aracılığıyla kontrol edin.