【erlang】正则匹配

re模块

1.compile

把一个正则表达式编译成一个正则匹配指令

compile(Regexp) -> {ok, MP} | {error, ErrSpec}
compile(Regexp,Options) -> {ok, MP} | {error, ErrSpec}

Regexp 可以是任意 Perl 风格的正则表达式, Options 选项参数

{ok, MP} = re:compile("[\x{4e00}-\x{9fa5}]+", [unicode]), %匹配中文
re:run("1234测试数据test", MP).

2.replace

根据正则表达式来替换数据

replace(Subject,RE,Replacement) -> iodata() | charlist()
replace(Subject,RE,Replacement,Options) -> iodata() | charlist() | binary() | list()

用一个替换值(Replacement)去替换正则表达式(RE)匹配到的数据,参数 Subject 是要匹配替换的数据,参数 RE 是替换的正则表达式,参数 Replacement 是要替换的值。

re:replace("Red Green Blue", "e+", "*").

3.run

根据正则表达式去匹配数据并返回匹配结果

run(Subject,RE) -> {match, Captured} | nomatch
run(Subject,RE,Options) -> {match, Captured} | match | nomatch

参数 RE 可以是正则字符串,也可以是用 re:compile 预编译过的正则匹配指令。

re:run("abc 1234 @#$", "\\d+").

4.split

用正则表达式去截取数据

split(Subject,RE) -> SplitList
split(Subject,RE,Options) -> SplitList

通过正则表达式(RE)来找到截取标记,然后把数据(Subject)截取。只返回被截取分开的数据,截取标记不会返回。

re:split("red - green - blue", "-", [{return, list}]).

5.常用Options

unicode::编码
{capture, all|first, binary|list}::分组
global::全局
multiline::多行
dotall::让换行符由点元字符匹配
ungreedy::非贪婪匹配

正则表达式

Atoms[a-z][0-9a-zA-Z_]*
Variables[A-Z_][0-9a-zA-Z_]*
Floats(\+|-)?[0-9]+\.[0-9]+((E|e)(\+|-)?[0-9]+)?

正则表达式是以Erlang字符串来编写的。这意味着字符 \ 或 ” 必须以转码方式来书写。
例如浮点数的正则表达式就是:

 (\\+|-)?[0-9]+\\.[0-9]+((E|e)(\\+|-)?[0-9]+)? 。

正则表达式并不是一定要有转义序列字符的,他们可以自动生成。除了用在不同的地方,否则与普通的Erlang字符串是一样的。

re:run(Data, "-define\\((?<name>\\w+),\\h*(?<id>\\d+)\\).\\h*%%+\\h*(?<note>[^\r\n]*)\\-(?<type>.*).*)", [{capture, all, binary}, global])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值