Clojure 学习入门(16)- 正则表达式
函数 (re-pattern) 接受一个字符串参数,返回一个正则表达式样式(java.util.regex.Pattern类的实例)。这个样式能用于正则表达式匹配
- user=> (re-pattern "\\d+")
- #"\d+"
也可以使用读取宏来直接用文本的方式输入正则表达式:在字符串前使用#符号。和用re-pattern函数生成的一样,例如,下面的表示方式和前面的例子是相同的:
- user=> #"\\d+"
- #"\d+"
re-matcher函数:
re-matcher函数接受两个参数:一个正则表达式样式和一个字符串。返回一个有状态的"matcher"对象,提供给其它正则函数而不是直接提供样式。Matchers是java.util.regex.Matcher.类的实例。
- user=> (re-matcher #"\d+" "abc12345def")
- #<Matcher java.util.regex.Matcher[pattern=\d+ region=0,11 lastmatch=]>
- user=> (def matcher-num (re-matcher #"\d+" "abc12345def"))
- #'user/matcher-num
- user=> (re-find matcher-num)
- "12345"
这里的def函数用于定义变量,后面会描述
二、使用正则表达式:
re-find函数:
re-find接受一个样式与一个字符串或者一个matcher。每次调用,返回matcher中下一个符合正则匹配的结果。
- user=> (re-find #"\d+" "abc123")
- "123"
re-matches函数:
re-matches接受两个参数:一个正则表达式样式和一个字符串。返回任何和正则表达式样式匹配的字符串,如果没有匹配则返回nil。例如下面的代码:
- user=> (re-matches #"hello" "hello,world")
- nil
- user=> (re-matches #"hello.*" "hello,world")
- "hello,world"
- user=> (re-matches #"hello,(.*)" "hello,world")
- ["hello,world" "world"]
re-seq函数:
re-seq接受一个样式与一个字符串。它返回一个使用永久匹配(matcher)的lazy sequence(懒序列)(这个sequence在一个连续的样式匹配的字符串中)
- user=> (re-seq #"\d" "clojure 1.1.0")
- ("1" "1" "0")
- user=> (re-seq #"\w+" "mary had a little lamb")
- ("mary" "had" "a" "little" "lamb")
re-groups函数:
接受一个matcher,返回从接近的发现与匹配的集合。如果没有嵌套集合,则返回一个完全匹配的字符串。如果有嵌套集合,则返回vector集合,第一个元素是完全匹配的(非嵌套)
- user=> (def phone-number "672-345-456-3212")
- #'user/phone-number
- user=> (def matcher (re-matcher #"((\d+)-(\d+))" phone-number))
- #'user/matcher
- user=> (re-find matcher)
- ["672-345" "672-345" "672" "345"]
- user=> (re-groups matcher)
- ["672-345" "672-345" "672" "345"]
Clojure 学习入门(16)- 正则表达式相关推荐
- Clojure 学习入门(6)- 函数定义
一.创建函数: fn: fn是一个宏,用于定义一个简单的函数,如下: [python] view plaincopy print? user=> (fn [] "hello&quo ...
- Clojure 学习入门(6)—— 函数定义
一.创建函数: fn: fn是一个宏,用于定义一个简单的函数,如下: user=> (fn [] "hello") #<user$eval375$fn__376 us ...
- Clojure 学习入门(1) - 学习资料
转自:http://blog.csdn.net/ithomer/article/details/17225813 Clojure(发音类似"closure",['kləʊʒə(r) ...
- Clojure 学习入门(18)—— 数据类型
如何表示和处理数据 Clojure是一种动态类型语言,这意味着你在程序中永远不需要明确定义符号.函数.或者参数的数据类型.但是,所有的值仍然有一个类型.字符串时是字符串,数字是数字,列表是列表,等等. ...
- Clojure 学习入门(14)- 循环控制
Clojure 基于函数的流程控制 repeatedly 字面意思为重复函数.一般的用法如下: user=> (repeatedly 5 #(rand-int 11)) (6 8 2 6 6) ...
- Clojure 学习入门(13)- binding
Clojure里面是不支持变量的.Binding跟变量有点像,但是在被赋值之前是不允许改的,包括:全局binding, 线程本地(thread local)binding, 以及函数内的本地bindi ...
- Clojure 学习入门(17)- 异常处理
异常处理 Clojure代码里面抛出来的异常都是运行时异常.当然从Clojure代码里面调用的Java代码还是可能抛出那种需要检查的异常的. try - catch - finally 以及thro ...
- Clojure 学习入门(15)- 条件判断
一.标准的流程控制 if: 将一个判断表达式作为它的第一个参数进行求值.如果求值为true,那么就返回它的第二个参数(相当于"then"子句)的求值结果.如果结果为false( ...
- Clojure 学习入门(12)- map/pmap
clojure map数据结构的常用方法,小结一下 map 各种排序 [html] view plaincopy print? (println (sorted-map-by > 1 " ...
最新文章
- Daily Scrum02 12.07
- c语言输出精确圆周率,如何设计C语言程序输出圆周率小数点后的1000位?请大侠出手啊。...
- c语言第七章函数调用题库,c语言题库7-函数.doc
- flask中url_for的作用
- 争时金融java_Java高并发编程基础之AQS
- 新华计算机学校环境好吗,新华电脑校园环境好不好?(二)
- mp4v2 写mp4 java_使用mp4v2将H264+AAC合成mp4文件
- linux下的node.js下载和安装
- 邮件服务器两种协议,邮件服务器协议
- SqlServer-函数
- wampserver mysql乱码_ajax +json +php提交mysql数据库 中文乱码(wamp server 本地测试)求解?...
- C# MD5算法实现对文件校验
- STL vector中的max_size方法
- arccatalog点要素显示不完_改变人际关系核心要素,不讨好不献媚,牢记这3点,受益一生...
- 汽车用泄露测试系统2022年全球行业分析报告
- DNF的SPK文件解析笔记
- HTTPClient模拟登陆开心网001(from javaeye)
- Ubuntu中解决机箱前置耳机没声音
- CSDN 社区大趴-北京站 圆满结束
- 喜马拉雅自研网关架构演进过程
热门文章
- Linux常用命令汇总--cat
- 在一个机器上创建多个独立Firefox运行环境
- PHP连接MongoDB
- 运维人员需重视非技术能力(老鸟经验分享)
- PyQT简单入门--hello world
- 两个矩阵是否相交的算法_刷透近200道数据结构与算法,成功加冕“题王”,挤进梦中的字节!...
- dicom格式怎么转换_webm怎么转换mp4?视频格式转换你需要知道这个
- 计算机桌面变色怎么办,电脑屏幕变色了怎么办
- 查询oracle数据库错误修改了,【案例】Oracle报错ora-00600[2662] 修改控制文件scn推进数据库scn...
- android判断密码字符串,逆向分析苏宁易购安卓客户端加密到解密获取明文密码(附demo验证) | WooYun...