sun*_*ots 1 regex clojure clojure-contrib
在Clojure函数中耦合多个正则表达式的最佳方法是什么?我相信这个函数会这样开始:
(defn foo [x]
(re-seq #"some means to combine multiple regex")
Run Code Online (Sandbox Code Playgroud)
但我不清楚这是否有效,或这种功能的效率.为了提供可能的正则表达式耦合的示例,可以考虑搜索域名和IP的函数.对于域名,我会使用正则表达式:
(re-seq #"\b([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}\b" x)
Run Code Online (Sandbox Code Playgroud)
对于IP:
(re-seq #"\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b")
Run Code Online (Sandbox Code Playgroud)
正则表达式已允许与|运营商进行交替.
user=> (re-seq #"\d+" "123 foo 345 bar")
("123" "345")
user=> (re-seq #"[a-zA-Z]+" "123 foo 345 bar")
("foo" "bar")
user=> (re-seq #"\d+|[a-zA-Z]+" "123 foo 345 bar")
("123" "foo" "345" "bar")
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以通过插入|运算符以编程方式联合正则表达式模式.
(defn union-re-patterns [& patterns]
(re-pattern (apply str (interpose "|" (map #(str "(" % ")") patterns)))))
user=> (union-re-patterns #"\d+" #"[a-zA-Z]+")
#"(\d+)|([a-zA-Z]+)"
user=> (map first (re-seq (union-re-patterns #"\d+" #"[a-zA-Z]+") "123 foo 345 bar"))
("123" "foo" "345" "bar")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |