一、创建正则表达式 
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"]

Clojure 学习入门(16)- 正则表达式相关推荐

  1. Clojure 学习入门(6)- 函数定义

    一.创建函数:  fn: fn是一个宏,用于定义一个简单的函数,如下:  [python] view plaincopy print? user=> (fn [] "hello&quo ...

  2. Clojure 学习入门(6)—— 函数定义

    一.创建函数: fn: fn是一个宏,用于定义一个简单的函数,如下:  user=> (fn [] "hello") #<user$eval375$fn__376 us ...

  3. Clojure 学习入门(1) - 学习资料

    转自:http://blog.csdn.net/ithomer/article/details/17225813 Clojure(发音类似"closure",['kləʊʒə(r) ...

  4. Clojure 学习入门(18)—— 数据类型

    如何表示和处理数据 Clojure是一种动态类型语言,这意味着你在程序中永远不需要明确定义符号.函数.或者参数的数据类型.但是,所有的值仍然有一个类型.字符串时是字符串,数字是数字,列表是列表,等等. ...

  5. Clojure 学习入门(14)- 循环控制

    Clojure 基于函数的流程控制  repeatedly 字面意思为重复函数.一般的用法如下: user=> (repeatedly 5 #(rand-int 11)) (6 8 2 6 6) ...

  6. Clojure 学习入门(13)- binding

    Clojure里面是不支持变量的.Binding跟变量有点像,但是在被赋值之前是不允许改的,包括:全局binding, 线程本地(thread local)binding, 以及函数内的本地bindi ...

  7. Clojure 学习入门(17)- 异常处理

    异常处理  Clojure代码里面抛出来的异常都是运行时异常.当然从Clojure代码里面调用的Java代码还是可能抛出那种需要检查的异常的. try - catch - finally 以及thro ...

  8. Clojure 学习入门(15)- 条件判断

    一.标准的流程控制  if:  将一个判断表达式作为它的第一个参数进行求值.如果求值为true,那么就返回它的第二个参数(相当于"then"子句)的求值结果.如果结果为false( ...

  9. Clojure 学习入门(12)- map/pmap

    clojure map数据结构的常用方法,小结一下 map 各种排序 [html] view plaincopy print? (println (sorted-map-by > 1 " ...

最新文章

  1. Daily Scrum02 12.07
  2. c语言输出精确圆周率,如何设计C语言程序输出圆周率小数点后的1000位?请大侠出手啊。...
  3. c语言第七章函数调用题库,c语言题库7-函数.doc
  4. flask中url_for的作用
  5. 争时金融java_Java高并发编程基础之AQS
  6. 新华计算机学校环境好吗,新华电脑校园环境好不好?(二)
  7. mp4v2 写mp4 java_使用mp4v2将H264+AAC合成mp4文件
  8. linux下的node.js下载和安装
  9. 邮件服务器两种协议,邮件服务器协议
  10. SqlServer-函数
  11. wampserver mysql乱码_ajax +json +php提交mysql数据库 中文乱码(wamp server 本地测试)求解?...
  12. C# MD5算法实现对文件校验
  13. STL vector中的max_size方法
  14. arccatalog点要素显示不完_改变人际关系核心要素,不讨好不献媚,牢记这3点,受益一生...
  15. 汽车用泄露测试系统2022年全球行业分析报告
  16. DNF的SPK文件解析笔记
  17. HTTPClient模拟登陆开心网001(from javaeye)
  18. Ubuntu中解决机箱前置耳机没声音
  19. CSDN 社区大趴-北京站 圆满结束
  20. 喜马拉雅自研网关架构演进过程

热门文章

  1. Linux常用命令汇总--cat
  2. 在一个机器上创建多个独立Firefox运行环境
  3. PHP连接MongoDB
  4. 运维人员需重视非技术能力(老鸟经验分享)
  5. PyQT简单入门--hello world
  6. 两个矩阵是否相交的算法_刷透近200道数据结构与算法,成功加冕“题王”,挤进梦中的字节!...
  7. dicom格式怎么转换_webm怎么转换mp4?视频格式转换你需要知道这个
  8. 计算机桌面变色怎么办,电脑屏幕变色了怎么办
  9. 查询oracle数据库错误修改了,【案例】Oracle报错ora-00600[2662] 修改控制文件scn推进数据库scn...
  10. android判断密码字符串,逆向分析苏宁易购安卓客户端加密到解密获取明文密码(附demo验证) | WooYun...