前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Clojure 学习入门(16)—— 正则表达式

Clojure 学习入门(16)—— 正则表达式

作者头像
阳光岛主
发布2019-02-18 15:45:40
5370
发布2019-02-18 15:45:40
举报
文章被收录于专栏:米扑专栏米扑专栏

一、创建正则表达式 re-pattern函数:  函数 (re-pattern) 接受一个字符串参数,返回一个正则表达式样式(java.util.regex.Pattern类的实例)。这个样式能用于正则表达式匹配 

  1. user=> (re-pattern "\\d+")  
  2. #"\d+"

也可以使用读取宏来直接用文本的方式输入正则表达式:在字符串前使用#符号。和用re-pattern函数生成的一样,例如,下面的表示方式和前面的例子是相同的: 

  1. user=> #"\\d+"
  2. #"\d+"

re-matcher函数:  re-matcher函数接受两个参数:一个正则表达式样式和一个字符串。返回一个有状态的"matcher"对象,提供给其它正则函数而不是直接提供样式。Matchers是java.util.regex.Matcher.类的实例。 

  1. user=> (re-matcher #"\d+" "abc12345def")  
  2. #<Matcher java.util.regex.Matcher[pattern=\d+ region=0,11 lastmatch=]>  
  3. user=> (def matcher-num (re-matcher #"\d+" "abc12345def"))  
  4. #'user/matcher-num  
  5. user=> (re-find matcher-num)  
  6. "12345"

这里的def函数用于定义变量,后面会描述  二、使用正则表达式: re-find函数:  re-find接受一个样式与一个字符串或者一个matcher。每次调用,返回matcher中下一个符合正则匹配的结果。

  1. user=> (re-find #"\d+" "abc123")  
  2. "123"

re-matches函数:  re-matches接受两个参数:一个正则表达式样式和一个字符串。返回任何和正则表达式样式匹配的字符串,如果没有匹配则返回nil。例如下面的代码: 

  1. user=> (re-matches #"hello" "hello,world")  
  2. nil  
  3. user=> (re-matches #"hello.*" "hello,world")  
  4. "hello,world"
  5. user=> (re-matches #"hello,(.*)" "hello,world")  
  6. ["hello,world" "world"]  

re-seq函数:  re-seq接受一个样式与一个字符串。它返回一个使用永久匹配(matcher)的lazy sequence(懒序列)(这个sequence在一个连续的样式匹配的字符串中) 

  1. user=> (re-seq #"\d" "clojure 1.1.0")  
  2. ("1" "1" "0")  
  3. user=> (re-seq #"\w+" "mary had a little lamb")  
  4. ("mary" "had" "a" "little" "lamb")  

re-groups函数:  接受一个matcher,返回从接近的发现与匹配的集合。如果没有嵌套集合,则返回一个完全匹配的字符串。如果有嵌套集合,则返回vector集合,第一个元素是完全匹配的(非嵌套) 

  1. user=> (def phone-number "672-345-456-3212")  
  2. #'user/phone-number  
  3. user=> (def matcher (re-matcher #"((\d+)-(\d+))" phone-number))  
  4. #'user/matcher  
  5. user=> (re-find matcher)  
  6. ["672-345" "672-345" "672" "345"]  
  7. user=> (re-groups matcher)  
  8. ["672-345" "672-345" "672" "345"]  
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年01月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档