Существует много дискуссий о SO и других местах, где можно сопоставить адреса электронной почты с регулярными выражениями. Мне кажется, что вы спрашиваете, как использовать регулярные выражения в Clojure.
Читатель распознает #"
как начало буквального регулярного выражения, заканчивающееся на "
. Пример: #"(t)+"
.
Вы также можете использовать re-pattern
для компиляции регулярного выражения из строки, чтобы вы могли динамически создавать шаблон регулярного выражения, например: (re-pattern (str "^" my-var "$"))
.
Если вы пытаетесь использовать регулярное выражение, чтобы соответствовать строке во всей ее полноте, вы можете использовать re-matches
. Она возвращает nil
(нет соответствия) исходная строка (она соответствует), или вектор [full-string, capture-1, capture-2, ...]
(re-matches #"abc" "abcdefg") ;; => nil
(re-matches #"abc.*" "abcdefg") ;; => "abcdefg"
(re-matches #"abc(.)(.*)" "abcdefg") ;; => ["abcdefg", "d", "efg"]
re-matcher
принимает регулярное выражение и строку и возвращает java.util.regex.Matcher
. Вы можете использовать метод find()
, чтобы получить следующий матч, или вы можете использовать Clojure's re-find
.
(def my-matcher (re-matcher #"[aeiou].[aeiou]" "alienate"))
(re-find my-matcher) ;; => "ali"
(re-find my-matcher) ;; => "ena"
(re-find my-matcher) ;; => nil
Если вы используете Искателя, то вы можете использовать re-groups
, чтобы получить группы с самого последнего матча.
Другое использование re-find
является регулярным выражением и строкой, чтобы вернуть только первый матч:
(re-find #"[aeiou].[aeiou]" "alienate") ;; => "ali"
Для многих случаев, вы найдете re-seq
быть более удобной альтернативой до re-find
с re-matcher
. Она возвращает ленивой последовательности всех матчей:
(re-seq #"[aeiou].[aeiou]" "alienate") ;; => ("ali", "ena"), lazily
Наконец, вы можете производить поиск и замену с replace
и replace-first
. re-quote-replacement
помогает с раздражающим действием экранирующих символов.
Посмотрите на [Использование регулярного выражения для проверки адреса электронной почты] (http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address) –
Я новичок в clojure. Я не могу написать правильный синтаксис для проверки по электронной почте. –
Даунвиты абсолютно глупы. Это вопрос начинающих, и у него больше просмотров, чем другие недавние вопросы #clojure. –