一、创建正则表达式
re-pattern函数:
函数 (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还没有正则表达式吗? 确实如此,并且该库不是重新实现正则表达式的尝试。 但是,这是尝试探索可组合正则表达式引擎的外观以及如何帮助编写更易于读写的正则表达式的尝试。 “可组合正则表达式”是什么...
- `(clojure.string/)re-place`, `replace-first`, `re-quote-replacement`: 正则表达式的使用。 - **Letters** - `(clojure.string/)capitalize`, `lower-case`, `upper-case`: 文本格式化。 - **Trim** - `...
Regal提供了使用普通Clojure数据(向量,关键字,字符串)编写正则表达式的语法。这就是富豪符号。 拥有Regal表单后,您可以将其编译为regex对象( java.util.regex.Pattern或JavaScript RegExp ),也可以使用它来...
在学习Clojure的过程中,Handbook介绍了语言的基础知识,如REPL(Read-Eval-Print Loop)交互式环境、变量定义、基本类型、类型判断、执行多条语句的do表达式、条件语句、循环语句、正则表达式、命名空间、结构体...
2.9 正则表达式:Clojure支持正则表达式,允许进行字符串的模式匹配和搜索。 2.10 命名空间:在Clojure中,命名空间是代码组织的基本单位,它用于避免名称冲突。 2.11 结构体:Clojure提供结构体(defstruct)的...
4. **链接提取**:爬虫通常需要识别并跟踪页面中的链接,可能使用正则表达式或第三方库如`clj-webdriver`来提取链接。 5. **深度控制**:对于深度优先或广度优先的爬取策略,Clojure的递归和队列操作可以帮助实现。...
标题和描述提及的"Beagle"是一个工具,专为在文本文档流中查找特定关键字、短语、正则表达式以及处理复杂搜索查询而设计。Beagle旨在提供一种高效的方式,使得用户能快速定位和提取信息,尤其适用于大数据量的文本...
这种语法类似于正则表达式,但更为强大,因为它能够处理递归和嵌套结构。通过`clj-peg`,你可以定义一系列的规则,每个规则都是一段可以匹配输入文本的模式。当这些规则组合在一起时,它们能够构建出复杂的解析逻辑...
它可以接收来自日志服务器的事件,通过关键词匹配、正则表达式解析等手段,提取关键信息并进行报警或分析。 标签"clojure"和"ClojureClojure"强调了Riemann对Clojure语言的依赖和贡献。Clojure的特性使得Riemann的...
Reitit是基于Ring的路由库,它提供了一个强大的路由系统,支持正则表达式、命名参数和嵌套路由。在本示例应用中,Reitit用于定义Web应用的URL结构和对应的处理函数。这使得路由配置更加灵活和易于维护,可以更好地...
如果无上下文语法和正则表达式一样容易使用怎么办? 特征 Instaparse旨在成为在Clojure中构建解析器的最简单方法。 将无上下文语法的标准EBNF或ABNF表示法转换为可执行的解析器,该解析器将字符串作为输入并为该...
1. **符号处理**:Lisp家族的语言以其独特的语法——S表达式(S-expressions)闻名,这使得代码本身看起来更像数据,方便进行解析和操作。 2. **函数式编程**:Clojure鼓励函数式编程范式,支持高阶函数和纯函数,...
clout基于正则表达式和模式匹配的概念,允许开发者定义路由模式,这些模式可以与HTTP请求的路径进行匹配。一旦匹配成功,clout会将请求转发到对应的处理器函数,同时还可以捕获和解析路径中的动态部分,方便参数传递...
6. 灵活性:ataraxy 支持多种 URL 路径匹配方式,如精确匹配、正则表达式匹配,以及基于前缀的模糊匹配,为开发者提供了丰富的路由配置选项。 在实际使用中,ataraxy 可以帮助你构建高效且可扩展的 Clojure Web ...
- **规则与模式匹配**:Duckling使用正则表达式和语言特定的规则来解析输入文本,确保准确性和适应性。 - **多语言支持**:除了英语,Duckling还支持多种其他语言,满足全球化应用的需求。 升级到新的Duckling仓库...
Perl虽然面向对象性设计显得不够完整,并且其语法在易读性方面被认为有诸多不足,这使得它对于学生来说并不是最佳的学习选择,除非有特殊的项目需求(例如处理正则表达式)。 对于Linux/Unix用户来说,shell编程是...