`

[笔记]erlang正则使用

 
阅读更多

erlang的re包是兼容Perl(没学过...)的正则表达式的。

里面的函数也是对于正则的处理。

 

lz水平有限 doc又不是很看得懂 先写一点 以后再补充吧..

可以用compile这个函数来返回特定的内部使用的正则表达式:

20> {ok,MP}=re:compile("abc",[caseless]).
{ok,{re_pattern,0,0,
                <<69,82,67,80,61,0,0,0,1,0,0,0,6,0,0,0,0,0,0,0,97,1,99,
                  ...>>}}

 这边建立一个匹配"abc"的表达式 选项是不区分大小写 

其他的选项还有很多(看不懂啊 看不懂啊...)

 

 

 

run 执行正则匹配

有两个参数和三个参数的形式 三个参数的形式多了一个选项

一些例子: MP是上面的函数产生的:

48> re:run("abcabc",MP,[]).
{match,[{0,3}]}
49> re:run("abcabc",MP,[{capture,all,list}]).
{match,["abc"]}
50> re:run("abcabcABC",MP,[{capture,all,list},global]).
{match,[["abc"],["abc"],["ABC"]]}

关于 capture的选项 all是所有的 first是不显示子模式(不知道这么说对不对)的 看例子:

 

78> {ok,A}=re:compile("http(s)?",[caseless]).
{ok,{re_pattern,1,0,
                <<69,82,67,80,74,0,0,0,1,0,0,0,6,0,0,0,1,0,0,0,104,1,
                  112,...>>}}
79> re:run("Http://www.baidu.com",A,[{capture,all,list}]).
{match,["Http"]}
80> re:run("Https://www.baidu.com",A,[{capture,all,list}]).
{match,["Https","s"]}
81> re:run("Https://www.baidu.com",A,[{capture,[1],list}]).
{match,["s"]}
82> re:run("Https://www.baidu.com",A,[{capture,first,list}]).
{match,["Https"]}
83> re:run("Https://www.baidu.com",A,[{capture,all_but_first,list}]).
{match,["s"]}
 对于子模式还可以用[1],[2]匹配,例子:
105> {ok,A}=re:compile("http(s)?://(.*)/(.*)?",[caseless]).
{ok,{re_pattern,3,0,
                <<69,82,67,80,103,0,0,0,1,0,0,0,7,0,0,0,3,0,0,0,104,1,
                  47,...>>}}
106> re:run("http://www.baidu.com/s?wd=erlang&ch=1&tn=98067068_dg",A,[{capture,[2],list}]).
{match,["www.baidu.com"]}
107> re:run("http://www.baidu.com/s?wd=erlang&ch=1&tn=98067068_dg",A,[{capture,[3],list}]).
{match,["s?wd=erlang&ch=1&tn=98067068_dg"]}
  

 

 

 

 

replace执行替换:

55> re:replace("abcabcabc","a","",[{return,list}]).
"bcabcabc"
56> re:replace("abcabcabc","a","",[{return,list},global]).
"bcbcbc"
57> re:replace("abcabcabc","a","").
[[]|<<"bcabcabc">>]

 

 

最后是split:

60> re:split("abcabcabc","a").
[<<>>,<<"bc">>,<<"bc">>,<<"bc">>]
61> re:split("abcabcabc","a",[{return,list}]).
[[],"bc","bc","bc"]

 

文档的example多一点就好了...不然看下来真累...

网上找到个个文档 ,不过文档里有错 run中要匹配全部的加上global选项就可以了:

http://veniceweb.googlecode.com/svn/trunk/public/daily_tech_doc/erlang_re_20091201.txt

还有一个资料 例子比较全:

http://zotonic.com/documentation/908/just-enough-zotonic-source-part-3-regular-expressions

分享到:
评论

相关推荐

    erllex:简单的erlang正则表达式词法分析器

    总结来说,`erllex` 是一个用于Erlang的简单但实用的工具,它演示了如何使用正则表达式进行词法分析。通过这个工具,开发者可以轻松地解析和理解文本数据,为构建更复杂的解析器和编译器奠定了基础。

    re2:RE2正则表达式库的Erlang NIF绑定

    RE2正则表达式库的Erlang NIF绑定 使用re2 考虑到RE2的差异,该库的API尽可能遵循标准的Erlang / OTP re API。 $ erl 1&gt; re2:run("Bar-foo-Baz", "FoO", [caseless]). {match,[&lt;&lt;"foo"&gt;&gt;]} 2&gt; re2:replace(...

    在erlang项目中使用protobuf例子

    标题中的“在erlang项目中使用protobuf例子”指的是在Erlang编程环境中使用Protocol Buffers(protobuf)这一数据序列化工具。protobuf是由Google开发的一种高效、跨语言的数据表示和序列化格式,它允许开发者定义...

    erlang 笔记

    - **路径操作**: 使用`cd`命令改变当前工作目录,如:`1&gt; cd("e:/erlang_src").` - **打印当前路径**: 使用`pwd()`函数可以打印当前的工作目录。 #### 7. 高级函数定义与操作 - **高阶函数**: Erlang支持创建高...

    erlang 学习笔记1

    4. **异常处理**:Erlang使用`try...catch...throw`语句来处理错误,异常可以被显式抛出,也可以由运行时系统隐式抛出。 5. ** OTP(Open Telecom Platform)**:OTP是Erlang生态系统的核心,提供了一套用于构建...

    读书笔记:ErlangOTP设计原则中文文档.zip

    读书笔记:ErlangOTP设计原则中文文档

    Python-一个用Python实现的Erlang结点使用gevent库

    标题中的“Python-一个用Python实现的Erlang结点使用gevent库”指的是一个Python项目,该项目旨在实现Erlang的节点功能,但完全使用Python语言编写,并且利用了gevent库来提高并发性能。Erlang是一种用于构建高可用...

    erlang编程 Introducing Erlang

    分布式Erlang使用虚拟机(VM)的克隆,使得构建大规模分布式系统变得简单。 ### 7. 错误处理与恢复 Erlang采用“let it crash”哲学,鼓励程序在遇到错误时立即崩溃,而不是尝试恢复。这样可以快速暴露问题,便于...

    erlang_版本24.3.4.4

    5. **安装**:最后,使用`make install`将编译好的Erlang二进制文件安装到你的系统路径。在某些系统上,你可能需要管理员权限执行此操作。 Erlang的主要特性包括: - **并发性**:Erlang的进程模型是轻量级的,...

    erlang22最新下载包

    4. **安装**:完成编译后,使用`sudo make install`将Erlang安装到系统路径中。 对于开发者来说,了解这些更新和变化至关重要,因为它们可能影响到现有项目的行为,或者提供新的工具和技术来解决特定问题。学习和...

    erlang资源

    5. **REPL(Read-Eval-Print Loop)**:Erlang shell的使用,它是学习和测试Erlang代码的重要工具。 6. **实际应用案例**:可能包含Erlang在实时系统、网络通信、数据库或Web服务等领域的应用示例。 这两本书结合...

    erlang使用post方式发送json数据

    学习erlang的时候尝试编写的小例子,使用post方式发送json数据来进行http请求,希望能帮到大家~

    erlang25.0 windows版本

    在使用Erlang进行开发时,你可能需要用到以下工具和概念: - **Rebar3**:Erlang的构建和依赖管理工具,帮助你组织项目结构、编译代码和管理依赖。 - **OTP(Open Telephony Platform)**:Erlang的核心库,包含...

    基于Erlang VM的语言

    Reia弥补了Erlang在字符串处理、正则表达式和与其他工具库链接方面的不足,并尝试引入面向对象编程(OO)概念。 2. **Lisp Flavoured Erlang (LFE)**: LFE是Erlang VM上的Lisp方言,它既保留了Lisp的语法特性,又...

    Erlang23_3.zip

    总的来说,Erlang23_3版本的发布为开发者提供了在Windows 64位和Linux平台上使用Erlang的新选择,包括可能的性能改进和新特性。对于那些需要构建高效、高并发、容错系统的人来说,这是一个重要的更新,他们可以通过...

    Erlang官网下载过慢

    Erlang是一种面向并发的、函数式编程语言,主要用于构建高度可扩展的、容错性强的分布式系统。在IT行业中,Erlang因其强大的实时性和处理大量并发连接的能力而被广泛应用于电信、互联网基础设施和实时系统。RabbitMQ...

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    使用这些工具时,需要确保输入的数据准确无误,包括呼叫到达率(单位时间内新呼叫的平均数量)、系统容量(可用的服务器或线路数量)以及平均通话时长。计算结果可以帮助决策者理解在当前配置下,系统的性能表现,并...

    Erlang 20.3linux安装包

    对于Linux系统来说,安装Erlang有多种方法,但推荐使用最新版本,因为新版本通常包含更多的功能增强和安全修复。"Erlang 20.3linux安装包"可能是一个为Linux系统设计的Erlang特定版本的安装包,它包含了所有必要的...

    使用erlang连接ES的客户端

    本文将详细讨论如何使用Erlang作为客户端来连接并操作Elasticsearch服务器。 首先,为了连接Elasticsearch,我们需要一个Erlang的客户端库。目前,有多个Erlang库可以实现这一功能,如`es_client`可能就是这样的一...

    erlang版本的protobuf(erl_protobuffs)

    2. **生成Erlang代码**:使用protobuf编译器(protoc)和对应的Erlang插件,将`.proto`文件转换为Erlang模块。这些模块提供了编码和解码函数。 3. **编码与解码**:在Erlang程序中,你可以使用生成的模块来编码和...

Global site tag (gtag.js) - Google Analytics